是否会导致 WebWorker 将消息发布到 CPU 密集型任务的内存泄漏?

瑞安·佩舍尔

假设我有一个名为的 WebWorker 文件ticker.js,其中包含以下内容:

function tick() {
  postMessage(1);
}

setInterval(tick, 1);

然后在主 JavaScript 程序中我有这个:

let ready = true;
let prevTime = 0;

function sometimesLongTask() {
  ready = false;

  if (performance.now() - prevTime > 30) {
    // a very long CPU intensive task, like a loop which takes a while to complete

    prevTime = performance.now();
  }

  ready = true;
}

const intervalWorker = new Worker('ticker.js');

intervalWorker.onmessage = function() {
  ready && sometimesLongTask();
};

这会导致内存泄漏吗?

认为不会,但我不确定。我的逻辑是 whilesometimesLongTask有时需要一段时间(当 30 毫秒过去时),99% 的时间它会立即执行。因此,即使tick每毫秒都会向 Javascript 的事件队列添加一个新的,但每隔一段时间,Javascript 可以加速所有这些并将它们清除,因为它们中的大多数不需要执行。真的是这样吗?

另外,我在这里甚至需要准备好标志,还是什么都不做(我可以摆脱它)?我认为它可能什么都不做,因为 Javascript 是单线程的,所以即使 WebWorker 可能会很快发布多条消息,Javascript 也不能​​同时运行多个实例sometimesLongTask正确的?

贝尔吉

是的,这不会导致内存泄漏,因为根据定义,这意味着内存分配不会被释放,尽管不再需要消息队列的事件仍然需要,它们最终会被工作人员接收。

但是你甚至不会得到不断增长的内存使用量。这完全是由于prevTime比较——我们可以假设所有排队的事件都可以在长任务运行之间的 30 毫秒内处理(不做任何事情)。

我什至需要ready这里的标志,还是什么都不做?

它确实没有任何用处。请注意,它始终是true在执行处理程序时onmessage处理程序将永远不会中断您设置为onmessage同步sometimesLongTaskfalse

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

CPU 和带宽密集型是否直接使用 Firebase 云消息传递发送推送通知?

NextTick()不起作用[将CPU密集型任务与其他事件交织]

Nodejs CPU密集型任务

关闭CPU密集型任务的电源

如何判断操作是否是 CPU 密集型的

将CPU密集型进程设为最低优先级(19)会产生不利影响吗?

Python:多个线程上的CPU密集型任务

使用 webAssembly 改进 Nodejs CPU 密集型任务

I / O绑定与CPU密集型

猪CPU密集型任务-小数据文件-许多映射器?

如何延迟CPU密集型任务以允许渲染发生

我们可以在Java中加速CPU密集型任务吗?

Hadoop Java vs C / C ++处理CPU密集型任务

在AWS托管的.NET应用程序中扩展CPU密集型任务

将活动实例保存在片段中:是否会导致内存泄漏?

在玩游戏或使用CPU密集型程序时监视硬件和进程是否是个坏主意?

如何配置K8s集群以将备用CPU容量用于ML训练作业(或其他低优先级的CPU密集型工作)

具有CPU密集型服务器端任务的网站应使用哪种体系结构?

优化CPU密集型Golang WebApp的方法

Node.js和CPU密集型请求

如何简化C#的CPU密集型

用于CPU密集型操作的node.js

BigQuery 如何处理 CPU 密集型查询?

用于 CPU 密集型工作负载的 Docker 与 VM

我可以将多线程应用于python中的计算密集型任务吗?

setInterval CPU是否密集?

当安排大量 CPU 密集型工作时,.Net 线程池是否提供任何机制来避免 I/O 性能下降?

不带挂断调用的ManuallyDrop是否会导致内存泄漏?

引用数组索引是否会导致内存泄漏?