nodejs 异步函数是否使用所有 CPU 内核?

Ale*_*lex 2 cpu node.js server

如果我使用异步函数或带有回调的函数,如本机 fs 模块、http 等,它们是否会默认在所有 cpu 内核上运行?

或者整个事情只会使用1个核心?

jfr*_*d00 5

node.js 中的一些异步操作(例如fs模块中的文件 I/O )将通过 libuv 中的线程池使用 node.js 进程中的额外线程。这将取决于您的线程池的大小和操作的类型以及您的主机操作系统将占用多少额外的 CPU。在通过同一磁盘的文件 I/O 上使用多个 CPU 不一定有助于整体吞吐量,因为无论如何读/写通常会受到磁盘上读/写磁头位置的瓶颈。

一些异步操作,如网络(如http模块)本质上是非阻塞和异步的,不会与线程进行网络连接,也不会触发对额外 CPU 的任何有意义的使用。

所有这些都不会在多个线程中运行您自己的 Javascript,因为 Javascript 本身都在一个线程中执行。

要完全使用多个 CPU,您可以:

  1. 将您自己的一些 Javascript 放入新的 nodejs工作线程中,并通过消息传递回主 node.js 线程。
  2. 启动您自己的 node.js 子进程以在这些子进程中工作,并使用许多进程间通信选项之一来回传结果。
  3. 使用 node.js 集群,以便传入请求可以在可用队列之间拆分。这需要确保任何服务器状态都可以在所有集群进程之间共享(通常存储在所有进程都可以访问的某个数据库中)。这将允许单独的请求使用单独的 CPU - 它不会帮助单个请求使用更多的 CPU。为此,您需要使用 #1 和/或 #2。