也许实现node.js模块的人可以解释在单个线程上处理的node.js队列与将由模块执行的阻塞IO操作之间的协议。
我怀疑它是这样的:
问题1:以上序列是否正确?
问题2: node.js队列究竟是什么?它是使用Windows上的epoll,kqueue或IO完成端口的部分吗?它是一个模块的回调机制,通知node.js线程有些IO已经完成了吗?它是如何工作的?
答案 0 :(得分:9)
Node.js并没有像你推测的那样真正管理任何这些。相反,它依赖于操作系统来完成大部分异步IO。它根据操作系统使用select / epoll / kqueue。 “他们”只是打出一个呼叫,操作系统用流,块等回调...就其中的部分内容而言,它内置于V8中,它完成所有工作,将回调绑定到特定事件,如同它在浏览器中。最后,您可以查看libuv,它与节点一起编写,现在全部由Joyent维护。它是Github上的开源,所以如果你真的想要详细信息= D
,你可以浏览代码答案 1 :(得分:-1)
我非常怀疑Node.JS与Twisted的路由相同,只使用非阻塞IO和greenlets。操作系统线程对于这类事情似乎效率很低。