资源贴:https://www.yiibai.com/nodejs/nodejs_event_loop.html

1、基本概念

    同步:多个任务顺序执行

    异步:多个任务并排执行

2、node的并发实现原理

    Node JS是单线程应用程序,但它通过事件和回调概念,支持并发。 由于Node JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性。Node JS使用观察者模式。Node线程保持一个事件循环,每当任何任务得到完成,它触发这标志着该事件侦听器函数执行相应的事件。

3、例子程序


console.log('11111');

setTimeout(function (argument) {
	// body...
	console.log('22222');
},1000);

console.log('33333');

setTimeout(function (argument) {
	// body...
	console.log('44444');
},1000)

console.log('55555');

结果

02-node.js 单线程,‘ 异步’非阻塞io-LMLPHP

通俗解释:程序顺序执行首先打印了11111,然后遇到setTimeout函数,js底层会发现一个异步调用,主线程继续向下,打印33333,然后又遇到了setTimeout函数,又发起一个异步调用,主线程继续向下,打印55555, 异步函数调用打印22222,4444

调用过程:可以用 http://latentflip.com/loupe 查看js函数的调用过程

02-node.js 单线程,‘ 异步’非阻塞io-LMLPHP

解释:首先console.log方法被压入栈中,出栈,打印11111;其次setTimeOut被压入栈中,出栈,发起web api调用(异步),api调用完成后,回调函数将放入队列中,等主线程方法执行完毕以后,再顺序执行queue的回调函数;然后console.log方法被压入栈中,出栈,打印33333。后面类似

10-04 13:57