当我想充分利用多核心cpu时,为什么要运行两个或多个nodejs实例



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

Node执行异步I/O,但I/O在CPU方面几乎没有"功"。它主要是在等待操作系统准备好处理数据。因此,一个单节点进程只能很好地利用1个CPU核心来实现节点程序本身的实际逻辑。如果你最大限度地利用CPU核心,并希望同时运行更多实际程序的逻辑,那么你需要另一个进程。是的,从技术上讲,任何节点程序都有少数线程在使用,但其中只有1个是真正解释javascript的CPU密集型线程。

它主要是在等待操作系统准备好处理数据。所以单节点进程只能很好地利用1个CPU核心节点程序本身的实际逻辑。为什么?

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

最新更新