JavaScript多线程

Chr*_*ski 32 javascript multithreading google-gears web-worker

我正在研究在JavaScript中实现(真实或假冒)多线程的几种不同方法的比较.据我所知,只有网络工作者和Google Gears WorkerPool可以为您提供真正的线程(即通过真正的并行执行分布在多个处理器上).我找到了以下方法:

  • 在任务之间切换 yield()

  • 使用setInterval()(或其他非阻塞函数)线程相互等待

  • 使用Google Gears WorkerPool线程(带插件)

  • 使用html5网络工作者

我阅读了相关问题并发现了上述方法的几种变体,但大多数问题都是陈旧的,因此可能会有一些新的想法.

我想知道 - 你怎么能在JavaScript中实现多线程?还有其他重要方法吗?

更新:正如评论中所指出的,我真正的意思是并发性.

更新2:我发现Silverlight + JScript支持多线程的信息,但我无法验证这一点.

更新3: Google弃用了Gears:http://code.google.com/apis/gears/api_workerpool.html

s4y*_*s4y 25

网络工作者.它们是W3C标准(目前是一个工作草案)正是如此,并且不需要插件:

此规范定义了一个API,允许Web应用程序作者生成与其主页并行运行脚本的后台工作程序.

该规范还讨论了跨多个核心传播工作者,以实现真正的并发性(这是由浏览器的JavaScript引擎无形地处理的):

随着多核CPU的普及,获得更好性能的一种方法是在多个工作人员之间分配计算成本高昂的任务.在[一]示例中,对于每个从1到10,000,000的数字执行的计算上昂贵的任务被耕种到十个子工作者.

yield()并且setInterval()只安排稍后发生的事情,它们不与其他任何东西同时运行.

  • 经过很长一段时间没有什么新东西,我想指出人们在JS中寻找一种方法来做正确的方向来做到这一点,所以我接受这个答案:) (2认同)