【问题标题】:Do web workers get their own Garbage Collector?网络工作者有自己的垃圾收集器吗?
【发布时间】:2017-09-08 14:07:43
【问题描述】:

我有一些处理不一定是 CPU 密集型的,但是会创建许多临时对象,这会导致在动画等过程中出现令人讨厌的垃圾收集器打嗝。

将临时对象创建过程卸载到 Web Worker 是否有助于缓解这种情况?换句话说 - GC 打嗝会被隔离到 Web 工作线程并且不会影响我的主线程,还是 GC 会影响两个线程?

【问题讨论】:

  • 我猜他们会这样做,但这纯粹是猜测

标签: javascript browser garbage-collection web-worker


【解决方案1】:

ECMAScript 规范没有规定任何形式的内存管理,垃圾收集只在非规范部分提及。

同样,web worker 规范除了 wrt 之外没有太多关于垃圾收集的说明。一些对象必须存活多长时间。

所以这是特定于实现的行为。即使实现实现了每个工作人员的 GC 并在一般情况下避免共享开销,它们仍可能由于内存压力而触发所有工作人员的全局收集,尤其是在内存受限的系统上。

也就是说,与没有工作人员相比,您更有可能实现一些 GC 隔离。但是您必须注意避免工作线程和主线程之间的消息传递开销,因为序列化消息(对于结构化克隆算法)会产生额外的垃圾。使用可转移或共享内存缓冲区可以避免这种情况。

【讨论】:

  • 谢谢,接受了答案 :) 如果有一些关于主要浏览器如何选择实现这一点的文档,那就太好了。你碰巧有这些信息吗?
  • 他们的实现发生了变化,GC 属性不是他们保证的一部分,所以他们不会为外部用户记录它。但是您仍然可以在他们的 bugtracker 或技术博客中找到信息。对于 Firefox,GC 已经被划分了一段时间,因此存在相当多的隔离,但是我提到的内存压力的回退事件和一些共享的东西也存在。 tl;博士:是的,有点。但没有官方或指定的保证,这取决于,可能会发生变化,取决于实施
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2019-11-08
  • 1970-01-01
  • 2011-11-17
相关资源
最近更新 更多