事件循环的阶段如下:
┌───────────────────────┐
┌─>│ timers │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ I/O callbacks │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ idle, prepare │
│ └──────────┬────────────┘ ┌───────────────┐
│ ┌──────────┴────────────┐ │ incoming: │
│ │ poll │<─────┤ connections, │
│ └──────────┬────────────┘ │ data, etc. │
│ ┌──────────┴────────────┐ └───────────────┘
│ │ check │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
└──┤ close callbacks │
└───────────────────────┘
它如何工作?它会从一个阶段跳到另一个阶段吗?如果是,那么什么时候跳?还是只维护队列并在另一个之后执行一个回调? next tick
是什么,是否意味着当整个que完成且que为空时,循环又重新开始了?事件循环中是否有任何实际循环?轮询阶段如何工作?新请求到达时会发生什么?
节点维护工作池(实际上是c ++线程),并且每当有一些I / O任务或任何其他阻塞任务出现时,它就会将该任务移交给该工作线程,该工作线程实际上是在与数据库交互时执行系统任务并且获取数据,并且当工作线程完成其任务时,工作线程会将回调处理程序放回事件que中,而node接受此回调并执行它。它是否正确?
nodejs绑定是什么(C ++)?
事件循环如何工作?它可以在主线程上运行吗?