0

我知道,在做I/O操作的时候,nodejs在一个单独的线程中工作,那么,线程不能在另一个内核中运行吗?如果是这样,不是只有一个nodejs进程可以使用两个内核吗?

4

1 回答 1

0

Node 执行异步 I/O,但 I/O 在 CPU 方面几乎没有“工作”。它主要是在等待操作系统准备好处理数据。因此,单个节点进程只会充分利用 1 个 CPU 内核来执行节点程序本身的实际逻辑。如果您最大化该 CPU 内核并希望同时运行更多实际程序的逻辑,则需要另一个进程。是的,从技术上讲,任何节点程序都在使用少数线程,但其中只有 1 个是 CPU 密集型线程,它实际上正在解释您的 javascript。

它主要是在等待操作系统准备好处理数据。因此,单个节点进程只会充分利用 1 个 CPU 内核来执行节点程序本身的实际逻辑。为什么?

这是设计使然。通过做出这种特殊选择,节点程序不必处理复杂且容易出错的并发编程习惯用法,例如线程、信号量、锁定、死锁等。这只是处理这种复杂性的一种选择。它基于两个主要观察结果:1. 异步 I/O 似乎目前被认为是高并发系统最有效和可管理的设计;2. 大多数其他并发编程习惯相对更难正确编码。这正是 node.js 选择的。例如,“go”语言做出了一组不同的选择,有利于其他允许多线程、阻塞、通道、消息队列等的习惯用法。因此,go程序可以更好地利用多核机器。

于 2013-07-29T05:44:31.390 回答