节点中的承诺池

汤码

我一直在NodeJS代码中使用promises。我看待问题的基本方式-

通过使其处于异步状态(最终在某种程度上同步)在后台移动一些工作来释放主线程。

当我使用承诺的承诺和多个承诺时,我不太了解它们。如果存在某种程度上同步的事务,是否可以很好地说明它们在NodeJS中的实际工作方式?

  1. 例如,我有一个异步的数据库操作。在等待数据库操作完成时,线程继续执行其他一些语句并开始执行它们。数据库操作完成后,执行引擎将再次进行拾取,并在答应解决后开始执行所提供的功能。这是一个公平的声明吗?
  2. 图书馆如何promise-pool工作?例如,我以异步模式启动了10种不同的数据库操作。它们的工作方式是否类似于(1),只是等待解决并从那里继续进行?如果promise之后的那些后续操作是同步的,promise是否会被“排队”以执行?
  3. 通过使用相同的“承诺池”,如果我启动10个不同的同步事务并争夺CPU时间(例如在斐波那契数列中找到第一个10万个数字),将会发生什么?他们会只是排队而不真正并行执行吗?

谢谢!

翻转

例如,我有一个异步的数据库操作。在等待数据库操作完成时,线程继续执行其他一些语句并开始执行它们。数据库操作完成后,执行引擎将再次进行拾取,并在答应解决后开始执行所提供的功能。这是一个公平的声明吗?

是的,或多或少。尽管引擎本身不太可能这样做。在数据库库中更深的某个地方,可能有一个TCP套接字。当数据到达这些套接字时,引擎将使事件执行排队,最终这会滴落到您的数据库库中以解决承诺。

像promise-pool这样的库又如何工作?例如,我以异步模式启动了10种不同的数据库操作。它们的工作方式是否类似于(1),只是等待解决并从那里继续进行?如果promise之后的那些后续操作是同步的,promise是否会被“排队”以执行?

从较高的角度来看,这些库的工作方式是为它们提供“一些返回承诺的功能”。当给出很多时,它会统计已经调用了多少个这些函数,并且尚未兑现承诺。如果为这些函数提供的功能超过了池的大小,它将把这些功能保留在各种数组中,并在数量减少时调用它们。

通过使用相同的“承诺池”,如果我启动10个不同的同步事务并争夺CPU时间(例如在斐波那契数列中找到第一个10万个数字),将会发生什么?他们会只是排队而不真正并行执行吗?

JavaScript引擎同步执行代码。像斐波那契序列之类的东西将立即全部执行,这将导致延迟任何io和计时事件的触发。

作为结束语,我发现阅读Promise的源代码很有帮助。它们仅是几十行代码,异步承诺中并没有内在的部分。除了也许,当一个回调传递到then()应该被触发,它总是会发生略微更高版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章