Node.js是单线程的? 那Async.parallel是如何做到并行执行的?
如题,Async.parallel是如何做到并发执行的? 它的并行执行是否有一定的性能消耗?
8 回复
并发是因为网络 IO libuv会根据平台交给 kqueue/epoll/IOCP 去做,文件 IO 会交给libuv自己实现的线程池去做 单线程仅仅只我们编写的代码操作的东西都是在一个线程中:libuv实现的Event Loop中 并发执行肯定有性能消耗,但是这部分性能不算在Event Loop主进程中,详细可以看下图:
untitled2.png
@maxxfire async.parallel只是一个异步流程控制库,并发和它没关系,它只是负责把你写的一系列异步操作请求发出去,而这些异步请求能够真正的并发实现是我一楼说的那些。 你如果想了解如何实现等到所有异步请求返回后组装好结果再调用最后的回调可以看看async.parallel源代码实现 如果想了解为什么node单线程能实现并发,那么得去看看libuv如何实现event loop
"异步"和"同步"都是指单线程。 异步:如果同一时刻只有一个任务时才不阻塞,可以看作是"伪多线程" 多线程:无论如何都不阻塞 我的比喻可能不太恰当。 所以说,Node中尽量不要出现出现耗时的(CPU运算100ms以上)代码