我已经制作了一个如何理解它的图表:
current queue
,check queue
,close callbacks queue
,timers queue
和I/O callbacks queue
中。current queue
一个函数(任务/作业)执行。current queue
之后执行,并将macrotasks(任务)添加到check queue
。它可以通过要求API执行它来直接向其他队列添加任务。Idle, prepare
阶段用于某些内部节点js业务(可能像垃圾收集)。Poll
阶段从线程池中轮询线程,并使用适当的回调填充队列。Idle, prepare
和poll
阶段没有与之关联的js回调队列。thread pool
中的线程都是相同的,没有专门化。current task queue
。这种理解是对的,还是我错过了什么?
可以找到带有图表的MS Power Point .pptx文件here。
答案 0 :(得分:1)
图表看起来确实很复杂。在这种情况下,我发现一个非常完美的国王类比,可以对事件循环的工作方式有一个灰度级的理解。
想象一下,你想要运行的代码是一个国王,而节点就是军队 仆人。
这一天的开始是一个仆人唤醒国王并问他是否 需要什么。国王给仆人一份任务清单 回来睡一会儿。仆人现在分发这些任务 在他的同事中,他们开始工作。
一旦仆人完成任务,他就会在国王队外面排队 报告。国王让一个仆人一次进入,并倾听 他报告的事情。国王有时会给仆人更多的任务 在出路上。
生命是美好的,因为国王的仆人完成了他所有的任务 平行但只能一次报告一个结果,所以国王可以 对焦。
这里的国王是主要节点进程。这就是nodejs被称为单线程但异步的方式。