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

时间:2019-10-14 21:57:19

标签: node.js server cpu

如果我使用异步函数,或带有回调的函数(例如本机fs模块,http等),则默认情况下它们是否可以在所有CPU内核上运行?

还是整个事情只使用1个内核?

1 个答案:

答案 0 :(得分:1)

node.js中的某些异步操作(例如fs模块中的文件I / O)将通过libuv中的线程池在node.js进程中使用其他线程。这将取决于您的线程池的大小,操作的类型以及要使用多少个其他CPU的主机操作系统。在文件I / O上占用多个CPU的情况下,这并不一定有助于提高整体吞吐量,因为文件I / O上的所有CPU总是受到磁盘上读/写头位置的限制。

诸如网络之类的一些异步操作(如http模块)本质上是非阻塞且异步的,并且不使用线程进行其网络连接或触发任何有意义的额外CPU使用。

由于Javascript本身全部在一个线程中执行,因此这些都不会在多个线程中运行您自己的Javascript。

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

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