- 我了解到 node.js 在内部使用 libeio 在 *nix 平台上使用线程池执行异步文件I/O,对吗?
- 异步网络I/O 呢?它是由libev完成的吗?还有线程池吗?
- 如果里面有线程池,怎么会比传统的请求一个线程的模型更高效呢?每个 I/O 请求一个线程吗?
- windows上的机制是什么?我知道它是由 IOCP 完成的,并且有一个内核级别的线程池,对吧?
- 为什么linux还没有像windows IOCP这样原生的完全AIO机制呢?将来会有吗?
根据changchang的回答更新:
- 我快速查看了@changchang 给出的源代码,发现默认线程池大小可以通过UV_THREADPOOL_SIZE重置,我想知道在哪种情况下会使用它?
- 我也发现getaddrinfo用了这个线程池,除了fs还有吗?如果所有同步作业都在这个线程池中完成,那么默认大小“4”是否足够?
- 据我现在的理解,node.js 进程中将有 6 个基本线程:1 个 V8 线程(事件循环,用户 javascript 代码运行的地方)、1 个 libuv 事件循环和线程池中的 4 个,对吗?
我怎样才能在我的外壳(Ubuntu)中看到这些线程?我使用ps -eLf | grep 节点 | grep -v grep只看到两个:
根 16148 7492 16148 0 2 20:43 pts/26 00:00:00 ./bin/node /home/aaron/workspace/test.js
根 16148 7492 16149 0 2 20:43 pts/26 00:00:00 。 /bin/node /home/aaron/workspace/test.js