JavaScript多线程,怎么实现多线程
本教程运行环境:windows7系统,javascript1.8.5版本1.8.5,戴尔G3电脑。
我们都知道JS是单线程语言,甚至一些异步事件都是在JS的主线程上运行的(详见我的另一篇博客JS代码运行机制)。像setTimeout、ajax或者dom元素的一些事件这样的异步请求都是在JS主线程中执行的。这些操作不会在浏览器中打开一个新的线程来执行,只是在这些异步操作被操作或触发时进入事件队列,然后在JS主线程中开始运行。
首先说一下浏览器的线程。浏览器中的主线程包括UI渲染线程、JS主线程、GUI事件触发线程和http请求线程。
JS作为一种脚本语言,主要用于与用户交互和操作DOM。这就决定了它只能单线程,否则会带来复杂的同步问题。(我们这里不做这些问题的研究)
但是单线程语言有一个致命的确定性。如果一个脚本语言正在执行,而某个块的函数需要大量的时间来执行,就会造成拥塞。这样的项目用户体验很差,所以在项目的开发过程中是不允许存在这种现象的。
其实JS给我们提供了一个Worker类,它的作用就是解决这种阻塞现象。当我们使用这个类时,它将从浏览器请求一个新线程。这个线程用来单独执行一个js文件。
Var=newworker (JS文件路径);那么这个语句将请求一个线程来执行这个js文件。
当然,主线程中有一些方法来控制新线程和接收数据。这里只说几种常用的方法。
//postMessage(msg);
//postMessage方法将新线程执行的结果发送给浏览器的js引擎线程。
worker.onmessage=function(){
//获取新线程执行的js文件发送的数据,用event.data接收数据
console.log( event.data)
};
setTimeout( function(){
worker . termin ate();
//使用//terminate方法关闭工作线程。
},2000)
setTimeout( function(){
Worker=new Worker( js/test 22 . js );
//再次启动工作线程
},3000)可以在新线程中使用postMessage()方法向主线程发送一些数据,主线程使用worker的onmessage事件接收数据,从而实现js的多线程执行和多线程之间的数据传递。
【推荐学习:javascript高级教程】以上是如何实现javascript多线程的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。