Node.js事件循环理解(附图)

我读过这个和这个 ,看着这个 …

我已经做了一个我如何理解的图表:

在这里输入图像描述

  • Javascriptcallback(函数)可以存在于current queuecheck queueclose callbacks queuetimers queueI/O callbacks queue
  • Js代码一次只能从current queue一个函数(任务/作业)执行。
  • 此时执行的Js代码可以将微任务(作业)添加到current queue ,以便在自身和macros任务(任务)之后执行到check queue 。 它只能通过请求API来将任务添加到其他队列中。
  • Idle, prepare阶段是用于一些内部节点的业务(也许就像垃圾收集)。
  • Poll阶段轮询线程池中的线程,并使用适当的callback来填充队列。
  • Idle, preparepoll阶段没有与他们相关的jscallback队列。
  • (四) thread poolthread pool都是完全相同的,没有专门化。
  • 事件循环从每个队列中逐一执行并执行任务,直到其为空,然后移至下一个队列。
  • 队列中的任务没有任何与其关联的作业(微服务)。 作业仅在执行任务或其他作业期间创build,仅存在于current task queue

这种理解是正确的还是我错过了什么?

MS Power Point .pptx文件与图表可以在这里find。

该图看起来相当复杂。 在这种情况下,我觉得有一个比较完美的国王比喻,对事件循环的工作有一个灰色级的理解。

想象一下你想运行的代码是一个国王,节点是仆人的军队。

一天,一个仆人醒来,问他是否需要什么。 国王给仆人一份任务清单,然后再睡一会儿。 仆人现在将这些任务分配给他的同事,并开始工作。

一旦仆人完成任务,他排队在国王的季度之外报告。 国王让一个仆人一次,听他报告的东西。 国王有时会在出路上给仆人更多的任务。

生命是好的,因为国王的仆人并行执行所有的任务,但一次只能报告一个结果,所以国王可以集中精力。

这里的国王是主要的节点进程。 这就是nodejs被说成是单线程而非asynchronous的。