也许实现node.js模块的某个人可以解释一下单线程处理的node.js队列和模块执行的阻塞IO操作之间的协议。
我怀疑它可能是这样的:
- node.js线程以闭包形式注册回调函数,并将其与某些关联ID一起保存。
- node.js在模块上调用一个方法(应该执行阻塞IO),并将方法参数和关联ID传递给它。
- 模块方法开启一个线程并在IO操作上进行阻塞。
- 当IO操作完成时,模块的线程会回调node.js线程,并将结果和关联ID传递给它。
- node.js线程通过关联ID找到存储的回调闭包,并使用从模块返回的结果调用它。
问题1:上述序列正确吗?
问题2:什么是node.js队列?它是否是使用epoll、kqueue或Windows上的IO完成端口的一部分?它是否是模块通知node.js线程某些IO已完成的回调机制?它如何工作?