JavaScript多线程,怎么实现多线程

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: