使用JavaScript Web Workers进行并行编程/同步

Parallel programming / Synchronization using JavaScript Web Workers

本文关键字:并行 编程 同步 JavaScript Web Workers 使用      更新时间:2023-09-26

是否存在像屏障信号量监视器等同步原语?在JavaScript/Web Workers中可用,或者是否有一些库可用,使我能够使用这些东西(我正在考虑Java中的Java .util.concurrent)?

worker是否有一些模糊的属性来区分它们与线程(例如,它们可以与主线程共享内存吗)?是否有某种限制可以产生多少工人(比如,出于安全原因或其他原因……)?我需要特别注意什么吗?

Web worker没有共享内存的概念;所有在线程之间传递的消息都会被复制。也就是说,您不需要屏障、信号量、锁和监视器,因为您在web worker模型中不需要它们。

共享内存的概念早在2011年2月就提出了,但由于开发人员的复杂性,现在的状态无法修复=>https://lists.webkit.org/pipermail/webkit-unassigned/2011-February/287595.html

这里也有一个关于网络工作者的很好的宣传。http://blogs.msdn.com/b/ie/archive/2011/07/01/web-workers-in-ie10-background-javascript-makes-web-apps-faster.aspx

希望能有所帮助

简而言之:javascript中没有任何同步原语,但也不需要它们,因为javascript本质上是单线程的:)。worker只能访问自己的作用域(没有dom操作,只是计算),并向normal js所在的主ui线程发送消息。我不确定工人的最大计数,但肯定有一个限制,你可以在浏览器中尝试:)

希望这对你有帮助!

这里有一个基于jQuery的库:http://www.megiddo.ch/jcon-q-rency.

当然,该模型与java.util.concurrent并不完全相同,因为我们处理的不是相同的环境,正如其他答案所解释的那样…