浏览器是一个页面一个线程吗? 还是一个页面可以有多个线程?

浏览器是一个页面一个线程吗?
还是一个页面可以有多个线程?

阅读 1.8k
avatarAI BotBETA

浏览器的并发模型取决于具体的浏览器实现和操作系统,但通常每个浏览器进程至少包含一个主线程(也称为事件循环线程)。

对于单个浏览器窗口中的各个页面,通常会有一个主线程负责处理页面的渲染和其他 UI 操作,但也可能会有其他工作线程来处理某些任务,以提高性能和响应速度。

例如,某些浏览器可能会使用多个线程来处理页面的渲染,以便在等待 GPU 完成渲染操作时,其他线程可以继续处理其他任务。此外,浏览器还可能使用其他类型的线程来处理网络请求、数据解析、页面脚本执行等任务。

总的来说,浏览器的并发模型是相对复杂的,具体取决于实现和操作系统。但通常来说,每个浏览器进程会有一个主线程来处理页面的渲染和其他 UI 操作,同时也可能会使用其他工作线程来处理某些任务以提高性能和响应速度。

2 个回答
✓ 已被采纳

浏览器架构粗解

目前主流的浏览器基本采用多进程的架构

image.png

进程说明

  • 浏览器主进程:页面显示、子进程管理、用户交互、数据存储等功能。
  • 渲染进程:HTML、CSS、JS渲染出网页,V8引擎和排版Blink在该进程下运行,渲染进程在沙箱下运行,每个tab页对应一个渲染进程。
  • 网络进程:负责网络资源加载,之前在浏览器主进程运行。
  • GPU进程:实现3D效果、网页和Chroma界面渲染。
  • 插件进程:插件运行进程,在沙箱下运行,插件崩溃不会影响页面运行。

我们写的JS主要运行在渲染进程中,在渲染进程中又存在多个线程。

渲染进程的主要线程:

  • 主线程:这是我们JS执行的地方,事件循环也发生在这个线程中
  • 合成线程:这里是将HTML、CSS等合成为视口附近图块的位图
  • 栅格化线程:渲染进程中维护一个栅格化线程池,每个栅格化线程会从合成线程获取位图数据,调用GPU进程交互生成图像信息

image.png

image.png

因为页面JS运行在渲染进程的主线程下,所以通常说JS一个单线程

问题

浏览器是一个页面一个线程吗?
还是一个页面可以有多个线程?
  • 通常情况下,每打开一个新的Tab页都会创建一个渲染进程。
  • 从A页面打开B页时,如果B页和A页属于同一个站点,则B页和当A页共用一个渲染进程。否则浏览器会为B页创建新的渲染进程。
同一站点:是指两个请求地址的【根域名】相同、【协议】相同,包括根域名下的所有子域名和端口。
https://time.geekbang.org
https://www.geekbang.org
https://www.geekbang.org:8080

这三个网址属于同一站点,因为他们的协议相同、根据域名相同。所以在浏览器中用3个Tab页打开,但是使用相同的渲染进程。

一个渲染进程里面会有多个线程,页面JS主要运行在渲染进程的主线程上。

其实是有多个线程的,但受我们完全控制的只有一个,即运行 JS 的主线程。

还有一些不完全受控制的线程,比如 worker、渲染等等。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏