【问题标题】:Node.js event loop understanding (with a diagram)Node.js事件循环理解(附图)
【发布时间】:2018-01-15 21:56:09
【问题描述】:

我读过thisthis,看过this...

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

  • Javascript 回调(函数)可以出现在 current queuecheck queueclose callbacks queuetimers queueI/O callbacks queue 中。
  • Js 代码一次只能从current queue 执行一个函数(任务/作业)。
  • 此时执行的js代码可以将微任务(jobs)添加到current queue之后自己执行,宏任务(tasks)添加到check queue。它只能通过请求 API 来将任务添加到其他队列中。
  • Idle, prepare阶段用于一些内部节点js业务(可能像垃圾回收)。
  • Poll 阶段从线程池中轮询线程并使用适当的回调填充队列。
  • Idle, preparepoll 阶段没有与之关联的 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


【解决方案1】:

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

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

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

仆人完成任务后,在王府外排队 报告。国王一次让一个仆人进来,听 他报告的事情。有时国王会给仆人更多的任务 出去的路上。

生活是美好的,因为国王的仆人在 平行,但一次只报告一个结果,所以国王可以 重点。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2015-07-14
    相关资源
    最近更新 更多