在对Node.js和libuv进行一些研究时,我启动了一个带有UV_THREADPOOL_SIZE=1
的简单节点服务器,并查看了pstree,看看它真正使用了多少线程。
for Node.js 0.10 pstree -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
我还尝试为线程池大小设置更高的数字,以确保我不低于某个最小值。
我的问题是:
答案 0 :(得分:2)
我不能真正代表Node / V8部分,但一般来说,amy libuv应用程序将使用至少1 + UV_THREADPOOL_SIZE个线程。
第一个线程是通过调用uv_run运行libuv循环的线程,uv_run通常是主线程。然后libuv有一个UV_THREADPOLL_SIZE大小的线程池,其中运行文件系统和DNS操作。网络i / o通过使用epoll / kqueue等在循环线程中执行。