根据昌昌的回答更新:
我怎样才能在shell(Ubuntu)中看到这些线程?我使用 ps -eLf | grep节点| grep -v grep 只看到两个:
root 16148 7492 16148 0 2 20:43 pts / 26 00:00:00 ./bin/node /home/aaron/workspace/test.js
root 16148 7492 16149 0 2 20:43 pts / 26 00:00:00 ./bin/node /home/aaron/workspace/test.js
答案 0 :(得分:28)
首先,libuv
已从中移除了libeio
。但它确实像你提到的那样用libeio
这样的线程池执行异步文件I / O.
libuv
也会移除libev
。它基于不同平台中的异步I / O接口执行异步网络I / O,例如epoll
,kqueue
和IOCP
,没有线程池。有一个事件循环在uv
的主线程上运行,它会轮询I / O事件并处理它们。
libuv
内的线程池是一个固定大小的线程池(4 in uinx like system)。它执行任务队列角色,并通过在请求增加时无限期地生成线程来避免系统资源耗尽。
答案 1 :(得分:2)
Uptil版本0.6节点使用libev
来运行事件循环,libeio
用于异步I / O,(Unix后端严重依赖于这两个库)。但libuv
已开始替换version 0.8中的libev
和libeio
。它执行,保留和管理事件池中的所有io和事件。 libuv
是跨平台异步IO库的选择。
是的,但libev
不使用线程池。见here
澄清:根据我发布的link中的question,libeio
支持所有处理I / O(包括套接字)的POSIX函数。但节点作者决定仅将其用于异步文件I / O,并将libev
用于网络I / O.我不知道你从哪里听到它,但你可以在普通文件上使用epoll。
libev
使用事件循环,因此没有问题。
libev
和libeio
用于linux环境,并为所有内核提供事件循环/异步IO(支持select,poll,epoll,kqueue)。更新问题:
libuv
以下是我在Windows 8上的调查结果,通过Process Explorer进行检查。为节点申请流程显示了4个主题,1个DLL,1个文件和1个部分(共7个条目)。
ps -eLf
确实显示了所有线程和进程,也许你过度过滤它,只需查找节点进程pid,如ps -eLf | grep x
,其中x是节点进程的pid。