Web Workers - 他们创建实际的线程吗?

时间:2015-11-18 09:44:31

标签: javascript web-worker

我一直认为网络工作者会创建单独的线程,但今天我遇到了w3c网站上的规范。以下是关于网络工作者的引用:

  

这允许类似线程的操作,消息传递为   协调机制。

问题是 - 如果它是线程,而不是实际线程使用这项技术有什么优势(性能明智)?

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:6)

是的,网络工作者创建实际线程(或进程,规范是灵活的)。根据{{​​3}}规范,创建工作人员时,第一步是:

  
      
  1. 创建一个单独的并行执行环境(即一个单独的线程或进程或等效的构造),并在该上下文中运行其余的这些步骤。

         

    出于计时API的目的,这是工人创建的官方时刻。

  2.         

    (W3C Web Workers规范第4.4节)

因此明确指出在Web Workers中运行的代码在实际线程或进程中运行。

尽管可以在没有线程的情况下实现Workers(请注意"等效构造"语言),以便在不支持线程的系统上使用,但所有浏览器实现都将Web Workers实现为线程。

答案 1 :(得分:1)

Web工作者在与主线程隔离的单个线程中运行,它们传递消息的方式是类似于线程,并且根据您是否使用专用(只能访问)而工作方式不同从创建它的脚本)或共享(可以通过端口对象在同一域内的任何脚本访问)worker。

编辑: 更新的答案反映了我几个月前的评论。虽然SINGLE Web工作程序在一个独立的线程中运行,但并不意味着每个额外的工作程序都将在同一个线程中运行。

答案 2 :(得分:0)

根据MDN

  

Web Workers是一种机制,通过该机制,脚本操作可以在与Web应用程序的主执行线程分开的后台线程中运行。这样做的好处是可以在单独的线程中执行费力的处理,允许主(通常是UI)线程运行而不会被阻塞/减速。

因此,每个worker都不会创建一个单独的线程,但所有worker都在一个单独的线程中运行。

我想,就像其他事情一样,实施和方法可能因浏览器而异。