jot*_*cas 3 architecture multithreading node.js libuv
假设我有一台机器运行 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) 以上都不是?
谢谢!
当文档说“所有事件循环”时,它指的是同一进程中的所有 libuv 事件循环。所指的“全局”部分在单个进程的范围内。
libuv 无法与任意子进程协调以确保在所有使用 libuv 的进程中在系统范围内仅使用一定数量的线程。这可能需要一个配置文件或其他东西,而 libuv 不使用这些文件。
因此,如果您有 5 个节点进程,则假设每个进程都使用默认的 libuv 线程池大小,则总共将有 20 个libuv线程(每个进程 5 个 * 4 个线程)。现在请记住,每个进程将有超过 4 个线程,但并非所有这些都是 libuv 线程。例如,您有用于 javascript 执行的主线程,但也有 V8 用于各种任务的线程,例如优化代码、垃圾收集等。
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |