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

gra*_*tot 29 javascript event-loop node.js

我读过这个这个,看了这个 ...

我已经制作了一个如何理解它的图表:

在此输入图像描述

  • 的Javascript回调(功能)可以存在于current queue,check queue,close callbacks queue,timers queueI/O callbacks queue.
  • Js代码current queue一次只能从一个函数(任务/作业)执行.
  • 此时执行的Js代码可以将微任务(作业)添加current queue到自身之后执行,并将macrotasks (任务)添加到check queue.它可以通过要求API执行它来直接向其他队列添加任务.
  • Idle, prepare phase用于某些内部节点js业务(可能像垃圾收集).
  • Poll phase从线程池中轮询线程,并使用适当的回调填充队列.
  • Idle, preparepoll阶段没有与它们相关的js回调的队列.
  • (四)线程thread pool都是相同的,没有专业化.
  • 事件循环从每个队列逐个接受并执行任务,直到它为空,然后移动到下一个队列.
  • 队列中的任务没有与之关联的任何作业(微服务).作业仅在执行任务或其他作业期间创建,并且仅存在于作业中current task queue.

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

可以在此处找到带有图表的MS Power Point .pptx文件.

pnt*_*417 2

该图看起来确实相当复杂。我发现在这种情况下,国王的类比非常完美,可以对事件循环的工作原理有一个灰度级的理解。

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

这一天从一名仆人叫醒国王并询问他是否需要什么开始。国王给了仆人一份任务清单,然后又回去睡了一会儿。仆人现在将这些任务分配给他的同事,然后他们开始工作。

一旦仆人完成任务,他就会在国王的住所外排队报告。国王每次只让一名仆人进来,听他报告事情。有时国王会在出去的时候给仆人更多的任务。

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

这里的王就是主节点进程。这就是说 Nodejs 是单线程但异步的。