1

在 node.js 中,当一个人执行本质上是异步的事情时,async_id会为它生成一个。此 ID 可通过async_hooksAPI 访问。

由于 id 是整数(64 位),它们是否有可能在某个时候溢出?

似乎重置 id 的唯一原因是出现异常时。 https://github.com/nodejs/node/blob/94454927f697840a25c1ae73ebbcf9a5324b9060/lib/internal/process/execution.js#L129

4

1 回答 1

0

我还没有深入研究 Node.JS 代码,对于这个答案,我假设那些async_id's 是从 0 开始生成并上升的。如果负值也进入等式,这将更加疯狂。

当您有 64 位 (int) 来存储一个值时,您有2^63 = 9,223,372,036,854,775,808 ~= 9.22e+18 个可能的正值(包括 0)。

这意味着您可以在程序运行时创建那么多可能的异步索引。

让我们假设一个极端情况,您的程序每秒创建 10 亿次异步操作,并且不间断运行100 年(这两件事几乎都是不可能的):

  • 100 年 = 3,153,600,000 ~= 3.15e+9 秒
  • 1,000,000,000 次异步操作 * 3,153,600,000 秒 = 3,153,600,000,000,000,000 ~= 3.15e+18

这意味着您的程序必须大致不间断地运行另外 200 年才能真正溢出承诺索引。这意味着300 年

你可以自己判断,但我认为这在经验上是不可能的。

希望这可以帮助。

于 2019-09-12T13:32:54.183 回答