请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

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

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

正在回答 回答被采纳积分+3

1回答

双越 2022-04-08 21:20:06

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

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

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

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

1 回复 有任何疑惑可以回复我~
  • 明白,谢谢
    回复 有任何疑惑可以回复我~ 2022-04-08 21:25:53
  • 之前我学py的时候,py的多线程是可以共享数据的,然后可以操作线程锁。同一个文件,同一个函数方法,开启多线程。
    
    对比之下,js这种加载外部脚本的方式开启多线程,而且要通过特定api才能数据通讯,确实有点另类。设计上,感觉确实有点像多进程
    回复 有任何疑惑可以回复我~ 2022-04-08 21:39:40
  • 双越 回复 提问者 Charles_So_网页开发 #3
    py 是多线程的语言,js 根本不具备启动线程、操作线程锁的 API 。
    回复 有任何疑惑可以回复我~ 2022-04-09 08:54:42
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信