浏览器新开一个webworker线程,实际上是多加一个进程?

来源:5-13 -nodejs如何开启多进程,进程如何通讯-进程和线程的区别

Charles_So_网页开发

2022-04-08

老师你说 js 开多线程,其实是多开一个进程,并不是真正意义上的多线程。

但我在Chrome里测试发现, new Worker() 之后,Chrome 自带的 Task Manager里面并没有多一个 进程 process,任务管理器也没看到多开启一个进程。

按照我个人理解,new Worker 就是在当前网页进程(现代浏览器是多进程模式,1个网页对应1个进程),里面多开一个线程。本质上还是在网页进程里面多开启一个 webworker线程,理论上他应该还是跟js线程处于同一个进程中。

请问是怎么回事?
图片描述

写回答

1回答

双越

2022-04-08

根据红宝书的解释,Web Worker 是“线程”,但这个线程并不是 Java 那种 new Thread() 可以通过代码开启多线程。

Web Worker 这个“线程”,有时候是本进程内部的,有时候又是其他进程内部的,因为 Web Worker 的种类有很多,像 SharedWorker 允许多 tab 通讯,就得开启一个新的进程。

看起来感觉乱糟糟的,所以它从去名字上就做了取舍。不叫 Process ,不叫 Thread ,叫 Worker  —— 一个很抽象,怎么解释都模糊的名字。

所以,建议你不要继续思考 Web Worker 的底层。这需要知道 JS 是单线程的语言就可以了。

2
3
双越
回复
Charles_So_网页开发
py 是多线程的语言,js 根本不具备启动线程、操作线程锁的 API 。
2022-04-09
共3条回复

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程