事件循环阶段如何处理请求?

时间:2018-07-24 08:35:14

标签: node.js event-loop

事件循环的阶段如下:

   ┌───────────────────────┐
┌─>│        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 ++)?

事件循环如何工作?它可以在主线程上运行吗?

0 个答案:

没有答案