首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Node.js每个进程自旋7个线程

为什么Node.js每个进程自旋7个线程
EN

Stack Overflow用户
提问于 2020-05-01 21:07:40
回答 1查看 458关注 0票数 2

当一个Node.js进程被旋转时,top命令显示附加到该进程的7个线程。这些线程都在做什么?此外,随着API上的负载增加,请求处理程序本身异步地等待其他上游API调用,节点是否会产生额外的工作线程?我在上面看到它能做到这一点。但我在想,这种情况只发生在文件I/o上,为什么它需要这些额外的工作线程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-01 21:55:17

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

另外,还有一个用于执行Javascript的线程,这样就占了5。

然后,垃圾收集器似乎有一个线程用于对象的背景标记(每个来自V8开发人员的此引用)和这篇文章。那就等于6了。

我不知道第七张会是什么。事件循环本身可能使用一个线程。

然后,从2018年前后的某个时间开始,似乎nodejs为DNS请求切换到了一组单独的线程(与文件I/O线程池分开)。这可能是因为node.js中存在问题,其中4个缓慢的DNS请求可能会阻塞所有文件I/O,因为它们接管了线程池。因此,现在看来node.js使用了C图书馆作为DNS,它生成了自己的一组线程。

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61550822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档