node.js-0020,单线程,‘ 异步’非阻塞io
资源贴: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');
结果
通俗解释:程序顺序执行首先打印了11111,然后遇到setTimeout函数,js底层会发现一个异步调用,主线程继续向下,打印33333,然后又遇到了setTimeout函数,又发起一个异步调用,主线程继续向下,打印55555, 异步函数调用打印22222,4444
调用过程:可以用 http://latentflip.com/loupe 查看js函数的调用过程
解释:首先console.log方法被压入栈中,出栈,打印11111;其次setTimeOut被压入栈中,出栈,发起web api调用(异步),api调用完成后,回调函数将放入队列中,等主线程方法执行完毕以后,再顺序执行queue的回调函数;然后console.log方法被压入栈中,出栈,打印33333。后面类似