!--NEWSZW_HZH_BEGIN--
node.js中与生俱来的单线程编程、回调函数异步式作风让我们有时喜有时忧。先说单线程,很多人会费解于node.js的单线程如何能做到高并发?这个问题不是本篇文章重点,点到为止。澄清一点,node.js的单线程仅仅指javascript引擎是单线程的,不管如何我们没有方法在javascript中实现多线程和阻塞(本篇文章用到的方法一样不是通过V8引擎实现同步的);但对node.js的其他方面不代表不能多线程,例如IO。如果现在node.js遭遇大批要求,而这些要求都是IO密集型的,那末此时node每接收一个要求,在遇到耗时较长的IO操作时,javascript线程其实不会一直在此期待,而是交出掌握,在回调堆栈里添加IO操作完成后要履行的操作(当回调层级过量,拜访数目过大,大批的回调链可能会爆栈)。而在这段时光内,node.js又可以处置其他要求了。所以对node.js而言,虽然javascript是单线程的,每次只能处置一个要求,但javascript处置一个要求的时光常常较短(对IO密集型运用而言),只要可以异步处置,那末在处置的进程中,此次要求都会释放掌握,使node.js能处置其他要求。这并发要求的同时,IO其实一直处于并发状况,减少处置要求的线程数,勤俭资源以增长IO的线程数,对通常耗时很长的IO密集型要求来讲,无疑能带来性状上的晋升。node.js中与生俱来的单线程编程、回调函数异步式作