gpt4 book ai didi

node.js - nodejs 异步函数是否使用所有 CPU 内核?

转载 作者:行者123 更新时间:2023-12-02 03:08:20 24 4
gpt4 key购买 nike

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

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

最佳答案

node.js 中的一些异步操作(例如 fs 模块中的文件 I/O)将通过 libuv 中的线程池在 node.js 进程中使用额外的线程。这将取决于您的线程池的大小和操作的类型,以及您的主机操作系统将使用多少个额外的 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。

关于node.js - nodejs 异步函数是否使用所有 CPU 内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com