Javascript 网络工作者-他们是否创建实际的线程?

Javascript 网络工作者-他们是否创建实际的线程?,javascript,web-worker,Javascript,Web Worker,我一直认为web工作人员创建单独的线程,但今天我在w3c网站上遇到了该规范。以下是关于网络工作者的引文: 这允许以消息传递为基础进行类似线程的操作 协调机制 问题是-如果它是线程式的,而不是实际的线程,那么使用这种技术的优势(性能方面)是什么 任何帮助都将不胜感激 根据 Web Workers是一种机制,通过它可以使脚本操作在与Web应用程序的主执行线程分离的后台线程中运行。这样做的好处是,可以在单独的线程中执行费劲的处理,从而允许主线程(通常是UI)运行,而不会被阻塞/减慢 因此,每个辅助线程

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

这允许以消息传递为基础进行类似线程的操作 协调机制

问题是-如果它是线程式的,而不是实际的线程,那么使用这种技术的优势(性能方面)是什么

任何帮助都将不胜感激

根据

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

因此,每个辅助线程并不创建单独的线程,但所有辅助线程都在单个单独的线程中运行


我想,就像其他事情一样,不同浏览器的实现和方法可能有所不同。

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

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

是的,web workers创建实际线程(或进程,规范在这方面是灵活的)。根据规范,创建worker的第一步是:

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

    为了给API计时,这是工人的正式创建时刻

  • (W3C网络工作者规范第4.4节)

    因此,明确指定在Web Worker中运行的代码在实际线程或进程中运行


    虽然可以在不支持线程的系统上实现没有线程的工作线程(请注意“等效构造”语言),但所有浏览器实现都将Web工作线程作为线程来实现。

    谢谢!这是“单个独立线程”吗专门用于web工作人员?与UI线程分离?@Dontfeedthecode单个独立线程是否意味着所有工作人员只有一个线程?@Dontfeedthecode因此使用多个工作人员没有任何好处。@TomášZato抱歉,我想我的答案传达错误,它将为所有工作人员生成一个线程,每个工作人员都与主UI线程分离d、 请为您的答案添加一些参考。我不确定您是从哪里获得您提供的信息的。@andrey看起来他们没有。我认为这个答案只是MDN内容的一种可能解释。不清楚与主执行线程分离的背景线程指代每个
    工作者
    实例的线程,或每个浏览器进程的线程。但是这两种解释都是可能的。@YeldarKurmangaliyev:每个webworker都在自己的线程中运行。请仔细阅读MDN文本:“通过它可以使脚本操作在后台线程中运行”。并非所有脚本操作。但每个脚本操作都在各自的线程中运行。接受的答案具有误导性。请参阅我的答案。