【发布时间】:2018-01-15 21:56:09
【问题描述】:
我已经制作了一个图表来说明我是如何理解它的:
- Javascript 回调(函数)可以出现在
current queue、check queue、close callbacks queue、timers queue和I/O callbacks queue中。 - Js 代码一次只能从
current queue执行一个函数(任务/作业)。 - 此时执行的js代码可以将微任务(jobs)添加到
current queue之后自己执行,宏任务(tasks)添加到check queue。它只能通过请求 API 来将任务添加到其他队列中。 -
Idle, prepare阶段用于一些内部节点js业务(可能像垃圾回收)。 -
Poll阶段从线程池中轮询线程并使用适当的回调填充队列。 -
Idle, prepare和poll阶段没有与之关联的 js 回调队列。 - (四个)
thread pool中的线程都是相同的,没有专门化。 - 事件循环从每个队列一个接一个地获取并执行任务,直到它为空,然后移动到下一个队列。
- 队列中的任务没有与之关联的任何作业(微服务)。作业仅在执行任务或其他作业期间创建,并且仅存在于
current task queue中。
这种理解是对的还是我遗漏了什么?
可以在here找到带有图表的MS Power Point .pptx文件。
【问题讨论】:
-
这对我来说看起来过于复杂。也许是这样,但是当您编写代码时,一个更简单的模型还不够吗?我认为没有必要知道引擎盖下发生的所有细节。知道当前滴答有一个队列、下一个滴答有一个队列以及等待计时器或 I/O 的回调是否足够。
-
我无法回答这个问题,但我非常感谢您为您的问题付出的努力。
-
@LorenzMeyer 一个更简单的模型足以编写代码,但我仍然想知道引擎盖下的内容。乔治,谢谢:)
-
我认为文档部分是您可以发布此内容的正确位置。实际上,您没有任何人可以回答的精确问题,您只需寻找对您的模型的同行评审。
-
@MarioSantini 你的意思是stackoverflow.com/documentation/node.js/topics?也许我明天会仔细看看它是如何工作的。我应该编辑现有的 Eventloop 主题还是创建一个新主题?
标签: javascript node.js event-loop