根据长常的回答更新:
我怎么能看到我的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
首先, libuv
已经把libeio
了。 但正如你所提到的那样,它使用像libeio
这样的线程池执行异步文件I / O。
libuv
也删除libev
。 它基于不同平台的异步I / O接口(如epoll
, kqueue
和IOCP
)进行异步网络I / O,无需线程池。 有一个事件循环在uv
的主线程上运行,轮询I / O事件并处理它们。
libuv
里面的线程池是一个固定大小的线程池( 在系统 libuv
是4 )。 它执行任务队列角色,并在请求增加时通过无限地生成线程来避免系统资源的耗尽。
Uptil版本0.6节点使用libev
来运行异步I / O的事件循环和libeio
(Unix后端严重依赖于这两个库)。 但是libuv
已经开始在0.8版本中取代libev
和libeio
了。 它执行,维护和管理事件池中的所有io和事件。 libuv
是跨平台异步IO库的选择。
是的,但libev
不使用线程池。 看到这里
澄清:根据我发布的问题中的链接 , 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
ps -eLf | grep x
其中x是节点进程的pid。