在对 Node.js 和 libuv 进行一些研究时,我启动了一个简单的节点服务器,UV_THREADPOOL_SIZE=1
并查看了 pstree 以了解它真正使用了多少线程。
对于 Node.js 0.10pstree -p | grep node
产生
node(5157)-+-{node}(5158)
`-{node}(5162)
为了让事情变得更复杂,我也尝试了 0.12 和 iojs 3.3。每个版本的线程数都不同。
线程总数与线程池大小
0.10:UV_THREADPOOL_SIZE + 1
0.12:UV_THREADPOOL_SIZE + 2
3.3:UV_THREADPOOL_SIZE + 4
我还尝试为线程池大小设置更高的数字,以确保我不低于某个最小值。
我的问题是:
- 在主进程(5157)上执行什么以及在下面的线程上执行什么?
- 我们可以假设 (5158) 是 libuv 的线程 id 并且 (5162) 是单个“工作”线程吗?
- 0.12 和 iojs 3.3 会发生什么?为什么最多有 4 个线程超过配置?