我一直认为网络工作者会创建单独的线程,但今天我遇到了w3c网站上的规范。以下是关于网络工作者的引用:
这允许类似线程的操作,消息传递为 协调机制。
问题是 - 如果它是线程,而不是实际线程使用这项技术有什么优势(性能明智)?
任何帮助将不胜感激!
答案 0 :(得分:6)
是的,网络工作者创建实际线程(或进程,规范是灵活的)。根据{{3}}规范,创建工作人员时,第一步是:
- 醇>
创建一个单独的并行执行环境(即一个单独的线程或进程或等效的构造),并在该上下文中运行其余的这些步骤。
出于计时API的目的,这是工人创建的官方时刻。
(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都在一个单独的线程中运行。
我想,就像其他事情一样,实施和方法可能因浏览器而异。