从Mozilla文档中:
Web Workers是使Web内容在以下环境中运行脚本的简单方法 后台线程。
考虑Javascript是单线程的,网络工作者是分开的 threads 还是 processes ?是否存在将它们归类为线程的共享内存?
答案 0 :(得分:2)
它们在后台threads中运行,但是API完全从实现中抽象出来,因此您可能会遇到一个浏览器,该浏览器仅将它们安排为与Node等其他事件在同一线程上运行。进程太繁重,无法运行后台任务。
答案 1 :(得分:1)
考虑Javascript是单线程的
JavaScript不是单线程的。
JavaScript程序的主要部分在事件循环上运行。
长时间运行的进程(XMLHttpRequest是经典示例)几乎总是被移植到事件循环之外(通常在不同线程上)运行的东西。
Web Workers只是编写在主事件循环之外运行的JavaScript的一种方式。
网络工作者是分开的线程还是进程?是否存在将它们归类为线程的共享内存?
这是特定JS引擎的实现细节。
答案 2 :(得分:1)
根据 MDN:-
<块引用>Worker 接口会产生真正的操作系统级线程,细心的程序员可能会担心,如果您不小心,并发性可能会在您的代码中产生“有趣”的效果。
答案 3 :(得分:0)
文档没有定义 Web Worker 是在单独的线程还是进程(或其他类似的结构)中运行。因此,根据执行程序的处理器的硬件架构,所使用的操作系统和 JavaScript 引擎的实现,可能会有所不同。
但是,我猜这个问题的本质是:操作系统可以通过使用 web worker 来使用多个 CPU 内核吗?如果是这样,答案是:YES!!!甚至不考虑 JavaScript 引擎的实现!
只要处理器有很多核心,操作系统可以使用它们,即使Web Worker的脚本在同一个进程的另一个线程中执行,这些线程也可以运行在不同的核心,因为“进程”是操作系统的一种构造,它本身可以在多个处理器核心上运行,就像多个进程可以在单个核心上运行一样。
P.S.如果您希望代码在另一个进程中 100% 执行,请将其委托给另一个服务(例如,在不同的服务器上运行)。