【发布时间】:2021-12-10 01:12:32
【问题描述】:
您好,我上面的问题有点含糊,所以我会尽量说得更清楚。
我有以下形式的代码:
function main () {
async function recursive () {
var a = "Hello World";
var b = "Goodbye World";
recursive();
}
recursive();
}
我遇到了堆内存不足的问题。
假设我上面展示的是我的程序的行为方式,在递归函数中声明了 a 和 b,我的问题是变量是否在递归函数中调用 recursive 时被销毁,或者它们是否会持续存在直到存在假设我让 main 函数运行足够长的时间以使其发生,不再进行递归调用,并且 main 函数到达其端点。
我担心它们在堆中仍然存在,因为我的真实程序在这些变量中存储了大字符串,我担心这就是我用完堆的原因。
【问题讨论】:
-
您缺少
await recursive(),。从理论上讲,这应该会阻止堆耗尽。但是今天有一个类似的问题表明 Chrome 至少优化了async.. 虽然做await Promise.resolve()可以防止这种情况-> 看到这个线程-> stackoverflow.com/questions/51554274/… -
我需要调用递归来并行运行,这就是我不等待的原因。无论如何,等待不会导致未等待的承诺进入堆?
-
如果您不等待至少某种形式的限制,那么堆当然会填满,..
the un awaited promise to go to the heap anyway?确实,这就是您的问题所在.. 您将承诺无限推到堆,你需要某种形式的节流。 -
很差。它没有 tco
标签: javascript node.js asynchronous recursion heap-memory