Reputation: 1091
Update according to changchang's answer:
And how can I see these threads in my shell(Ubuntu)? I use ps -eLf | grep node | grep -v grep only saw two:
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
Upvotes: 25
Views: 8250
Reputation: 549
First of all, libuv
has removed the libeio
from it. But it does perform async file I/O with a thread pool like libeio
just as you mentioned.
libuv
also removes libev
. It does the async network I/O based on the async I/O interfaces in different platforms, such as epoll
, kqueue
and IOCP
, without a thread pool. There is a event loop which runs on the main thread of uv
which polls the I/O events and processes them.
The thread pool inside libuv
is a fixed size thread pool (4 in uinx like system). It performs a task queue role and avoids the exhaustion of the system resources by generating threads indefinitely when the requests increase.
Upvotes: 31
Reputation: 48013
Uptil version 0.6 node used libev
to run event-loop and libeio
for asynchronous I/O, (Unix backend sits heavily on these two libraries). But libuv
has started replacing libev
and libeio
in version 0.8. It performs, mantains and manages all the io and events in the event pool. libuv
is the choice in cross-platform asynchronous IO libraries.
Yes, but libev
does not use thread pool. See here
Clarification : According to the link in the question I posted, libeio
does support all POSIX functions dealing with I/O (which includes socket). But node author decided to use it for async file I/O only, and uses libev
for network I/O. I dont know where you heard it from but you can use epoll on regular files.
libev
uses event loop so no problems here.
libev
and libeio
were for linux environment and provides event loop/async IO for all kernel (supports select, poll, epoll, kqueue).Update questions:
libuv
Here are my findings on Windows 8, checked it via Process Explorer. Showed 4 threads, 1 DLL, 1 File and 1 Section (total 7 entries) for a node application process.
ps -eLf
does show all threads and processes, maybe you are over-filtering it, just look for the node process pid like ps -eLf | grep x
where x is pid for node process.
Upvotes: 2