gpt4 book ai didi

javascript - 为什么 Node.js 每个进程旋转 7 个线程

转载 作者:行者123 更新时间:2023-12-02 00:02:09 25 4
gpt4 key购买 nike

当 Node.js 进程启动时,top 命令显示有 7 个线程附加到该进程。所有这些线程在做什么?此外,随着 API 负载的增加,请求处理程序本身会异步等待其他上游 API 调用,Node 会产生额外的工作线程吗?我在顶部看到它这样做了。但我认为这只发生在文件 I/O 上。为什么它需要这些额外的工作线程?

最佳答案

LIBUV(node.js 构建的底层跨平台系统库)使用线程池进行某些操作,例如磁盘 I/O 和一些加密操作。默认情况下,线程池包含 4 个线程。

此外,还有一个用于执行 Javascript 的线程,因此占 5 个。

然后,似乎有一个线程被垃圾收集器用于对象的后台标记(根据 this reference from a V8 developer )和 this article .那就是 6。

我不确定第 7 个会是什么。事件循环本身可能使用了一个线程。

然后,从 2018 年左右开始,nodejs 似乎切换到一组单独的线程来处理 DNS 请求(与文件 I/O 线程池分开)。这可能是因为 node.js 中的问题,其中 4 个慢速 DNS 请求可能会阻塞所有文件 I/O,因为它们接管了线程池。所以,现在看起来 node.js 使用了 C-ARES library为 DNS 创建自己的线程集。

仅供引用,您实际上可以使用 UV_THREADPOOL_SIZE 环境变量控制线程池大小。


当然,您可以创建自己的工作线程,这些工作线程实际上会创建 V8 Javascript 执行引擎的新实例(因此它们最终可能会创建多个新线程)。

关于javascript - 为什么 Node.js 每个进程旋转 7 个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61550822/

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