- 我已经了解到,Node.js的使用libeio内部执行异步文件 I/O,以线程池,在* nix平台,是吗?
- 异步网络 I/O?它是由libev完成的吗?是否还有线程池?
- 如果里面有线程池,它怎么比传统的单线程每请求模型更有效率?并且它是每个I/O请求的一个线程?
- 什么是Windows的机制?我知道它是由IOCP完成的,并且有一个内核级线程池,对吧?
- 为什么linux没有像Windows IOCP那样的本地完全AIO机制呢?将来会有吗?
根据长常的回答更新:关于Node.js的困惑内部异步I/O机制
- 我参加了一个快速查看在给@changchang的source code,发现默认的线程池的大小可以通过UV_THREADPOOL_SIZE被重置,我想知道在这种情况下这将被使用?
- 我还发现getaddrinfo使用这个线程池,除了fs之外还有更多吗?如果所有同步作业都将在此线程池中完成,那么缺省大小'4'是否足够?
- 按照我现在的理解,node.js过程中将会有6个基本线程:1个V8线程(事件循环,其中用户JavaScript代码运行),1个libuv事件循环,以及线程池中的4个,对吗?
我如何在我的shell(Ubuntu)中看到这些线程?我使用ps -eLf | grep节点|的grep -v grep的只看到有两个:
根16148 7492 16148 0 2 20点43分/ 26 00:00:00 ./bin/node /home/aaron/workspace/test.js
根16148 7492 16149 0 2 20点43分/ 26 00:00:00 ./bin/node /home/aaron/workspace/test.js
看到这里http://stackoverflow.com/questions/10680601/nodejs-event-loop – user568109 2013-03-20 15:20:29
node.js的实际使用[libuv(https://github.com/joyent/libuv/)抽象所有支持平台的异步IO – Milan 2013-03-20 15:23:12
@ user568109我已经阅读过,但不能直接从中得到答案,实际上,不清楚的表达会让我更加困惑。它提到libeio'异步执行输入输出'(包括套接字),我对此表示怀疑。我从某个地方了解到这一点:因为不能在普通文件上使用epoll,所以这里来解放执行线程的aio。 – 2013-03-21 00:58:37