JavaScript如何实现多线程?

9
有没有任何想法(库或方法)可以在JavaScript中创建多线程应用程序?
5个回答

7

John Resig也谈到了这些内容:http://ejohn.org/blog/web-workers/。他们甚至制作了JavaScript光线追踪器,哈哈。 - Dan Beam

4

JavaScript实际上没有多线程能力,而且JavaScript程序员无法改变这一点。

但是,我们可以模拟多线程。请阅读本文章了解更多信息。

还有一个PDF链接,介绍了用于异步处理的JavaScript多线程框架论文。


1

我发现另一种线程模拟方法是使用图像,这种方法在浏览器中好像会在另一个线程中加载。但是你的回调JavaScript始终按顺序运行。

下面的示例加载了500个图像。

<html>
<head>
   <title>so</title>
    <style></style>
</head>
<script>
    function callBack(img){
        var i = 0, img, res = document.getElementById('res'),
            fn = function(cnt){
                var img = document.createElement('img');
                img.onerror = function(ev){
                    res.innerHTML += cnt + ', ';
                    document.body.removeChild(img);
                };
                img.src = 'javascript:void(0)';
                document.body.appendChild(img);
            };
        do{
            fn(i++);
        }while(i<500);
    }
</script>
<body onload="callBack()">
    <div id="res"></div>
</body>
</html>

0

Web Workers

您可以使用Web Workers创建后台线程。

Web Workers为Web内容提供了一种在后台线程中运行脚本的简单方式。工作线程可以执行任务,而不会干扰用户界面。此外,它们可以使用XMLHttpRequest执行I/O操作(尽管responseXML和channel属性始终为空)。创建后,工作者可以通过发布消息到由该代码指定的事件处理程序(反之亦然)向创建它的JavaScript代码发送消息。本文介绍了使用Web Workers的详细介绍。

浏览器兼容性

Chrome: 4

Firefox(Gecko):3.5

Internet Explorer:10.0

Opera:10.6

Safari(WebKit):4


0

JavaScript是一种动态编程语言,可用于许多不同的事情。如果它不是从浏览器中使用,您可以完全依赖于诸如多线程、事件循环等功能。您应该查看node.js

不幸的是,浏览器只提供了语言的严格功能集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接