HTML5 Web Worker是线程还是进程?

时间:2019-03-01 07:11:30

标签: javascript html5 web-worker

从Mozilla文档中:

  

Web Workers是使Web内容在以下环境中运行脚本的简单方法   后台线程。

考虑Javascript是单线程的,网络工作者是分开的 threads 还是 processes ?是否存在将它们归类为线程的共享内存?

4 个答案:

答案 0 :(得分:2)

它们在后台threads中运行,但是API完全从实现中抽象出来,因此您可能会遇到一个浏览器,该浏览器仅将它们安排为与Node等其他事件在同一线程上运行。进程太繁重,无法运行后台任务。

答案 1 :(得分:1)

  

考虑Javascript是单线程的

JavaScript不是单线程的。

JavaScript程序的主要部分在事件循环上运行。

长时间运行的进程(XMLHttpRequest是经典示例)几乎总是被移植到事件循环之外(通常在不同线程上)运行的东西。

Web Workers只是编写在主事件循环之外运行的JavaScript的一种方式。

  

网络工作者是分开的线程还是进程?是否存在将它们归类为线程的共享内存?

这是特定JS引擎的实现细节。

答案 2 :(得分:1)

根据 MDN:-

<块引用>

Worker 接口会产生真正的操作系统级线程,细心的程序员可能会担心,如果您不小心,并发性可能会在您的代码中产生“有趣”的效果。

参考:- https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#about_thread_safety

答案 3 :(得分:0)

文档没有定义 Web Worker 是在单独的线程还是进程(或其他类似的结构)中运行。因此,根据执行程序的处理器的硬件架构,所使用的操作系统和 JavaScript 引擎的实现,可能会有所不同。

但是,我猜这个问题的本质是:操作系统可以通过使用 web worker 来使用多个 CPU 内核吗?如果是这样,答案是:YES!!!甚至不考虑 JavaScript 引擎的实现!

只要处理器有很多核心,操作系统可以使用它们,即使Web Worker的脚本在同一个进程的另一个线程中执行,这些线程也可以运行在不同的核心,因为“进程”是操作系统的一种构造,它本身可以在多个处理器核心上运行,就像多个进程可以在单个核心上运行一样。

P.S.如果您希望代码在另一个进程中 100% 执行,请将其委托给另一个服务(例如,在不同的服务器上运行)。