一直都说nodejs是单线程,采用事件异步回调的机制,达到非阻塞。一直很不是很理解,最近有点心得。
首先说说啥是单线程和多线程两者的区别:
单线程可以理解为任务制,在当前任务的时候要等待当前任务的结束才能进行下一个任务。而多线程可以有多个任务。两者各有优缺点。可以理解为“谈恋爱”,单线程就是传统的只能有一个女朋友,然后想要一个新的女朋友必须要和当前的女朋友分手才能谈新的女朋友。那多线程呢就是可以同时脚踏几条船。同时谈多个女朋友。如果是多线程的也就是多个女朋友的,一起去逛街的时候就可能会几个女朋友见面,这个时候就会抢夺资源,处理不好的时候就会出现问题了。 那单线程的话如果你分手分的够快,谈的女朋友也不一定就比多线程的少。但是如果有一个女朋友一直纠缠,那也会遇到问题的。
所以并没有说多线程和单线程的两者一定就是谁的效率更好,只能说具体情况具体考虑。
nodejs是单线程的这个事件的回调机制,就是让他能够速度分手的所在再说说啥是事件:
事件:我们在js当中会经常遇到,点击事件 触摸事件等等。就是把方法现在那里不一定就执行 一直在监听,只有这个方法触发的时候才去执行。
在nodejs当中用函数作为参数,这样来实现回调。
function doSomething(callback, something){
something = "nodejs";
callback(something);
}
function hello(something){
console.log(something + "is good");
}
doSomething(hello, "");
采用异步回调的方法来实现非阻塞。
那啥叫阻塞和非阻塞呢:
举个打电话的例子:
老板给你打电话 ,让你查东西, 一直在等着你查到结果汇报,你汇报结果,然后挂电话。
非阻塞呢:
老板给你打电话,让你查东西,然后挂电话,这段时间老板干啥都行,然后你查完了给老板回电话,然后老板听你的汇报结果。