gra*_*tot 29 javascript event-loop node.js
我已经制作了一个如何理解它的图表:
current queue
,check queue
,close callbacks queue
,timers queue
和I/O callbacks queue
.current queue
一次只能从一个函数(任务/作业)执行.current queue
到自身之后执行,并将macrotasks (任务)添加到check queue
.它可以通过要求API执行它来直接向其他队列添加任务.Idle, prepare
phase用于某些内部节点js业务(可能像垃圾收集).Poll
phase从线程池中轮询线程,并使用适当的回调填充队列.Idle, prepare
和poll
阶段没有与它们相关的js回调的队列.thread pool
都是相同的,没有专业化.current task queue
.这种理解是正确的还是我错过了什么?
可以在此处找到带有图表的MS Power Point .pptx文件.
该图看起来确实相当复杂。我发现在这种情况下,国王的类比非常完美,可以对事件循环的工作原理有一个灰度级的理解。
想象一下,您要运行的代码是国王,而节点是仆人的军队。
这一天从一名仆人叫醒国王并询问他是否需要什么开始。国王给了仆人一份任务清单,然后又回去睡了一会儿。仆人现在将这些任务分配给他的同事,然后他们开始工作。
一旦仆人完成任务,他就会在国王的住所外排队报告。国王每次只让一名仆人进来,听他报告事情。有时国王会在出去的时候给仆人更多的任务。
生活是美好的,因为国王的仆人并行执行他的所有任务,但一次只报告一个结果,这样国王就可以集中精力。
这里的王就是主节点进程。这就是说 Nodejs 是单线程但异步的。