NodeJS - libuv的线程池是全局的还是每个进程独立的?

3
假设我有一个运行5个不同nodejs进程的机器。每个node进程是否都有自己的libuv线程池,还是它们共享全局线程池?
我感到困惑,因为我认为libuv线程池是每个进程独立拥有的,但在libuv文档 (http://docs.libuv.org/en/latest/threadpool.html) 中它说:
线程池是全局的,所有事件循环共享
我不确定我是否真正理解了什么是“所有事件循环”。
所以回到我的例子。如果我有5个nodejs进程,并且考虑到libuv的默认线程池大小是4,那我最终会使用:
a) 9个线程:5个nodejs事件循环+4个线程用于全局线程池的libuv
b) 25个线程:5个nodejs事件循环+(5*4)个libuv线程,其中每个线程池都有4个线程。
c) 都不是以上答案?
谢谢!
1个回答

5
当文档中提到“所有事件循环”时,它指的是同一进程中的所有libuv事件循环。所提及的“全局”部分仅限于单个进程范围内。 libuv无法与任意子进程协调,以确保在使用libuv的所有进程之间仅使用有限数量的线程。这可能需要一个配置文件或其他东西,但libuv不使用。
因此,如果您有5个Node进程,则假设每个进程都使用默认的libuv线程池大小,则您将拥有总共20个libuv线程(5个进程*每个进程4个线程)。现在请记住,每个进程都会有更多于4个的线程,但并非所有这些线程都是libuv线程。例如,您有用于JavaScript执行的主线程,但还有V8用于各种任务的线程,如代码优化、垃圾回收等。

总的来说,它至少会使用那么多线程,除此之外还有GC、优化、超时处理等。非常感谢! - jotadepicas
哈哈,你的用户名真让人怀旧啊! - jotadepicas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接