JavaScript和线程

时间:2020-03-05 18:43:49  来源:igfitidea点击:

有没有办法在JavaScript中进行多线程处理?

解决方案

回答

在原始Javascript中,我们可以做的最好的事情就是使用几个异步调用(xmlhttprequest),但这并不是真正的线程化,而且非常有限。 Google Gears向浏览器添加了许多API,其中一些可用于线程支持。

回答

JavaScript中没有真正的线程。 JavaScript是它的可扩展语言,它确实允许我们模仿其中的一些。这是我前几天遇到的一个例子。

回答

有关最新的支持信息,请参见http://caniuse.com/#search=worker。

以下是大约2009年的支持情况。

我们要搜索的单词是JavaScript Worker线程

除了Gears之外,目前没有任何可用的东西,但是关于如何实现这一点的讨论很多,所以我猜想看这个问题,因为答案无疑会在未来改变。

以下是Gears的相关文档:WorkerPool API

WHATWG有一个针对工作线程的建议草案:Web Workers

还有Mozillas DOM Worker Threads

更新:2009年6月,浏览器对JavaScript线程支持的当前状态

Firefox 3.5具有网络工作者。如果需要查看网络工作者的一些演示,请执行以下操作:

  • 模拟退火("尝试"链接)
  • 太空侵略者(帖子末尾的链接)
  • MoonBat JavaScript基准测试(第一个链接)

Gears插件也可以安装在Firefox中。

Safari 4和WebKit每晚都有工作线程:

  • JavaScript Ray跟踪器

Chrome已加入Gears,因此可以执行线程操作,尽管它需要用户确认提示(并且Web工作者使用了不同的API,尽管它可以在安装了Gears插件的任何浏览器中使用):

  • Google Gears WorkerPool演示(不是一个很好的例子,因为它运行速度太快,无法在Chrome和Firefox中进行测试,尽管IE的运行速度足够慢,以至于它阻止了交互)

IE8和IE9只能在安装Gears插件的情况下执行线程

回答

Javascript中没有真正的多线程,但是我们可以使用setTimeout()和异步AJAX请求来获得异步行为。

我们到底想完成什么?

回答

我们可以使用Narrative JavaScript,这是一种将代码转换为状态机的编译器,可以有效地模拟线程。通过在允许我们在单个线性代码块中编写异步代码的语言中添加"屈服"运算符(表示为"->")来实现此目的。

回答

今天应该发布的新v8引擎支持它(我认为)