关于事件循环
发布于 6 年前 作者 michaeljunlove 3156 次浏览 最后一次编辑是 4 年前 来自 问答

在看《node.js入门经典》这本书的时候看到: 由于事件循环是以单一进程为基础的,所以为了确保高性能需要遵循以下原则: 1,函数必须快速返回。2,函数不得阻塞。3,长时间运行的操作必须移到另一个进程中去 但是之前在看《深入浅出node.js》的时候,说异步I/O在windows下是通过IOCP的线程池执行的,不管它是否阻塞I/O, 都不会影响到javascript线程的后续执行的,这和上面说的函数必须快速返回是不是矛盾啊? 求大神指点一下:为什么函数必须快速返回?

6 回复

快速返回了就不阻塞了啊,但是没有执行完的还在继续执行,比如一个大文件还在读,但是读文件的函数已经返回了

楼主觉得函数不快速返回有什么好处…?

@jiyinyiyong ,那本《node.js入门经典》应该是说在javascript的单线程中使用那些异步函数(就是非I/O的异步API)的时候应该做到这些原则,不然是会阻塞的。 但是对于异步I/O,按照《深入浅出node.js》是没有影响的。因为异步I/O在windows下是通过IOCP的线程池执行,执行的慢了,最多占用了线程,导致线程池中的线程不够用,然后别的异步I/O再那等待。

@russj 一个大文件还在读,但是读文件的函数已经返回了。我理解了,你说的是指在javascript中的单线程中将这个异步I/O交给IOCP后, 就返回到主线程中去了,这个过程,我之前理解错了

那些原则是为了不阻塞event loop吧。

回到顶部