Web-Wokers,并行还是并行?

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

[关于网络工作者的博客很多,但是似乎人们不了解并发和并行性的区别。有些人将其写为并行执行,而其他人则将其写为并行执行。

谁能帮助我解决这个困惑?

multithreading concurrency parallel-processing process web-worker
1个回答
0
投票

听起来好像在理解两个词之间的区别时可能有问题...

我代替您解释现有的答案,而是邀请您阅读that one from Mason Wheeler。基本上,并发是一种状态,并行性是实现此状态的手段之一。

[很难对您正在谈论的“博客”发表评论,但无法阅读,但是如果您想安全起见,请说Worker上下文与window的上下文并发运行。] >

如何实现并发性会有所不同。在多线程CPU上,很有可能实际上是并行

,但即使这样,它也不是给定的。

例如,您可以启动比number of threads available多的工人:

for( let i = 0; i <= navigator.hardwareConcurrency; i++ ) {
  const worker = new Worker('worker-script.js');
}

这里至少有两个上下文将共享同一CPU线程,这意味着这些上下文不会并行运行,但可能通过任务切换


单独说明,即使两个上下文确实并行运行,某些操作也将要求一个上下文等待另一个上下文释放。例如,工作线程的消息端口at init必须是主线程创建的临时端口的"entangled",以便它可以存储传入的消息,直到工作线程准备好处理它们为止。这种纠缠要求Worker等待父级上下文自由,以便它可以通过它。另一个示例是OffscreenCanvas,其中at least in Chrome's implementation,Worker必须等待主线程空闲,以便它可以访问相同的GPU上下文。

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