假设我有一台机器运行5个不同的nodejs进程。每个节点进程是否都有自己的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线程,用于5个不同的线程池,每个线程具有4个线程。
( c)上述任何一项都没有?
谢谢!
发布于 2017-02-03 00:25:20
当文档中说“所有事件循环”时,它指的是同一个过程中的所有libuv事件循环。所指的“全局”部分在单个进程的范围内。
libuv无法与任意子进程协调,以确保在使用libuv的所有进程中仅在系统范围内使用这么多线程。这可能需要配置文件或其他东西,而libuv并没有利用这些文件。
因此,如果您有5个节点进程,那么假设每个进程都使用默认的libuv线程池大小,那么总共将有20个libuv线程(5个进程*每个线程)。现在请记住,每个进程将有超过4个线程,但并不是所有这些线程都是libuv线程。例如,您有用于执行javascript的主线程,但也有一些V8用于优化代码、垃圾收集等各种任务的线程。
https://stackoverflow.com/questions/42014448
复制相似问题