Node.js通过使用事件循环而不是线程,将基于事件的模型置于核心,从而解决了“每个连接一个线程的问题”。所有昂贵的I / O操作始终与在启动操作完成时执行的回调异步执行。
如果发生任何操作,则由epoll()之类的多路复用机制处理该观察。
我的问题是:
为什么在使用阻塞系统调用select / epoll / kqueue时NodeJS不阻塞?
还是根本不是NodeJS单线程,因此需要第二个线程 来观察具有select / epoll / kqueue的所有I / O操作?
NodeJS 是 事件事件 (来自网站的第二行),不是单线程的。它在内部处理执行选择/ epoll / kqueue处理所需的线程,而无需用户明确地进行管理,但这并不意味着其中没有线程使用情况。