终止 Web Worker 是否也会终止它生成的所有子 Worker?

问题描述 投票:0回答:1

规范似乎表明事实并非如此,但如果我正确阅读它,这似乎是一个非常严重的错误?这可能会导致孤立的工作人员无限期地浪费计算资源,而主程序却没有任何对它们的引用。

javascript web-worker
1个回答
0
投票

哦,这部分规格确实看起来有问题,但不是你期望的那样。

终止父进程应该杀死它产生的进程。即使父母被杀,嵌套工人也可以很好地拥有自己的独立工作要做,例如它可以在主线程中保存一个

MessagePort
与一个交错,或者它可以有一个仍在运行的计时器等。

你描述的叫“孤儿工”,被监控关闭。 (临时链接)

关闭孤儿工作人员:开始监视工作人员,以便在其停止成为受保护工作人员并且不晚于停止成为允许工作人员时,工作人员全局范围的关闭标志设置为 true。

但这就是规格似乎有问题的地方。

如果一个工作人员是一个“主动需要的工作人员”,并且它具有未完成的计时器、数据库事务或网络连接,或者其“工作人员端口”列表不为空,或者其WorkerGlobalScope 实际上是一个 SharedWorkerGlobalScope 对象(即,worker 是共享worker)。

我相信它应该读作“
如果它是一个
活跃的需要工人

它有出色的计时器,[...]

”。 如果工作人员的所有者集确实包含主 navigable,那么这种措辞实际上可能有效,但从我对 processing model 部分的阅读来看,只有父级

WorkerGlobalScope

被添加到该集中。 (可能会注意到,在这种情况下似乎预计会发生一些事情,因为声明了父工作全局范围变量,但从未使用过。)

总而言之,目前的规范要求嵌套工作者在其 
owner (即产生它的那个)被杀死时被杀死,但这对我来说听起来很像一个错误,我将打开一个规格问题,因此我们可以在规格中解决这个问题。我相信正确的行为是,工作人员只有在不再被任何东西束缚时才会被杀死,这是我多年来在实现中看到的行为。


© www.soinside.com 2019 - 2024. All rights reserved.