- 我了解到在*nix平台上,node.js使用libeio内部执行异步文件 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 shell中看到这些线程?我只看到了两个:ps -eLf | grep node | grep -v grep
root 16148 7492 16148 0 2 20:43 pts/26 00:00:00 ./bin/node /home/aaron/workspace/test.js
根目录下,有一个名为"test.js"的文件,在终端中以"./bin/node /home/aaron/workspace/test.js"命令运行,进程ID为16148,父进程ID为7492。