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

时间:2017-08-08 10:57:24

标签: javascript node.js event-loop

我看过thisthis,看了this ......

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

enter image description here

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

这种理解是对的,还是我错过了什么?

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

1 个答案:

答案 0 :(得分:1)

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

  

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

     

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

     

一旦仆人完成任务,他就会在国王队外面排队   报告。国王让一个仆人一次进入,并倾听   他报告的事情。国王有时会给仆人更多的任务   在出路上。

     

生命是美好的,因为国王的仆人完成了他所有的任务   平行但只能一次报告一个结果,所以国王可以   对焦。

这里的国王是主要节点进程。这就是nodejs被称为单线程但异步的方式。