【发布时间】:2011-10-24 11:44:42
【问题描述】:
Node.js 通过将基于事件的模型置于其核心,使用事件循环而不是线程来解决“每个连接一个线程问题”。 所有昂贵的 I/O 操作总是异步执行,并在启动的操作完成时执行回调。
如果发生任何操作,则观察由epoll() 等多路复用机制处理。
我现在的问题是:
-
为什么 NodeJS 在使用阻塞系统调用时不阻塞 选择/epoll/kqueue?
-
或者 NodeJS 根本不是单线程的,所以第二个线程是
有必要用 select/epoll/kqueue 观察所有的 I/O 操作吗?
【问题讨论】:
-
我建议阅读这篇题为“节点不是单线程”的精彩文章:rickgaribay.net/archive/2012/01/28/…
-
你不能在 NodeJS 中进行并行任务/处理。
-
您很少在部署中只运行一个 Node 实例,因此您将拥有多个线程。如果你使用的是 Sails.js(Node 的 MVC 框架)之类的东西,你需要确保你的控制器动作是原子的,否则操作会混合起来,结果会出乎意料。
标签: multithreading architecture node.js