在 node.js 中,当一个人执行本质上是异步的事情时,async_id
会为它生成一个。此 ID 可通过async_hooks
API 访问。
由于 id 是整数(64 位),它们是否有可能在某个时候溢出?
似乎重置 id 的唯一原因是出现异常时。 https://github.com/nodejs/node/blob/94454927f697840a25c1ae73ebbcf9a5324b9060/lib/internal/process/execution.js#L129
在 node.js 中,当一个人执行本质上是异步的事情时,async_id
会为它生成一个。此 ID 可通过async_hooks
API 访问。
由于 id 是整数(64 位),它们是否有可能在某个时候溢出?
似乎重置 id 的唯一原因是出现异常时。 https://github.com/nodejs/node/blob/94454927f697840a25c1ae73ebbcf9a5324b9060/lib/internal/process/execution.js#L129
我还没有深入研究 Node.JS 代码,对于这个答案,我假设那些async_id
's 是从 0 开始生成并上升的。如果负值也进入等式,这将更加疯狂。
当您有 64 位 (int) 来存储一个值时,您有2^63 = 9,223,372,036,854,775,808 ~= 9.22e+18 个可能的正值(包括 0)。
这意味着您可以在程序运行时创建那么多可能的异步索引。
让我们假设一个极端情况,您的程序每秒创建 10 亿次异步操作,并且不间断运行100 年(这两件事几乎都是不可能的):
这意味着您的程序必须大致不间断地运行另外 200 年才能真正溢出承诺索引。这意味着300 年。
你可以自己判断,但我认为这在经验上是不可能的。
希望这可以帮助。