Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

浏览器的进程和线程详解 #22

Open
wqhui opened this issue Mar 3, 2022 · 0 comments
Open

浏览器的进程和线程详解 #22

wqhui opened this issue Mar 3, 2022 · 0 comments

Comments

@wqhui
Copy link
Owner

wqhui commented Mar 3, 2022

什么是进程与线程

进程=火车,线程=车厢,一个进程由一个或多个线程组成。
要想了解进程与线程的话,需要先了解 并行处理 ,并行处理是程序在同一时间处理多个任务,处理一个就是 单线程 ,处理多个就是 多线程
而进程则是用来启动和管理线程。

  • 线程在进程下行进,一个进程可以包含多个线程(一辆火车可以有多个车厢)
  • 进程间不会相互影响,进程中的任意一线程执行出错,都会导致整个进程的崩溃。(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
  • 线程之间共享进程中的数据。(A车厢换到B车厢很容易)
  • 不同进程间数据很难共享。(A火车和B火车不能随意换乘,除非到了站点)
  • 当一个进程关闭之后,操作系统会回收进程所占用的内存

单进程浏览器

早期的浏览器(比如早期的火狐),所有的模块都运行再同一个进程里的就是单线程浏览器。这会带来一些问题,比如:

  • 稳定性:当一个网页崩溃的时候,整个浏览器也会崩溃掉。
  • 流畅性:当一个网页渲染较慢时,也会拖慢其他网页。
  • 安全性:插件可以获取到系统资源;页面脚本可以通过浏览器漏洞获取系统资源。

多进程浏览器

1. 早期多进程(2008年Chrome 发布时的进程架构)

将之前单线程优化成 浏览器主进程插件进程渲染进程同一个浏览上下文组内的同一站点会共用一个渲染进程,否则是另启动一个渲染进程),这样做的好处:

  • 稳定性:进程相互隔离,一个页签崩溃不会影响其他的页签(除非二者是同一渲染进程)
  • 流畅性:不同网页进程不同,一个页签渲染较慢不会影响其他页签的渲染
  • 安全性:插件进程和渲染进程放在沙箱里面,这样即使在渲染进程或者插件进程里面执行了恶意程序,恶意程序也无法突破沙箱去获取系统权限。

2. 目前多进程( Chrome )

最新的 Chrome 浏览器包括:1 个 浏览器(Browser)主进程 、1 个 GPU 进程 、1 个 网络(NetWork)进程 、多个 渲染进程 和多个 插件进程

  1. 浏览器主进程
    主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
  2. GPU进程
    3D绘制、加速渲染等
  3. 网络进程
    网络资源加载
  4. 渲染进程
    核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,一般情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
    • GUI线程:HTML、CSS的解析以及网页渲染,与JS线程互斥
    • JS线程:负责解析运行JS,一个渲染进程中只有一个,是单进程。与GUI渲染线程互斥
    • 事件触发线程:也就是JS的事件池,用来管理一个JS引擎线程内的事件执行,将所有待处理事件添加到待处理队列的队尾。
    • 定时触发器线程:由于JS引擎是单线程,所以setInterval 与 setTimeout 需要单独的进程,计时完毕会将事件放到待处理的队列队尾(这一步也导致了两个事件的执行时间可能不是设置好的时间)。
    • 异步http请求线程:XMLHttpRequest在连接后是通过浏览器新开一个线程请求,将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入事件队列中。
  5. 插件进程
    插件运行的进程,多个插件会启用多个。

3. 多进程浏览器的缺点

  • 多进程带来的高系统资源占用率
  • 浏览器各模块之间耦合性高、扩展性差等问题。

未来浏览器展望

2016 年,Chrome 官方团队使用“面向服务的架构”(Services Oriented Architecture,简称 SOA)的思想设计了新的 Chrome 架构。原来的各种模块会被重构成独立的服务(Service),每个服务(Service)都可以在独立的进程中运行,这样做的好处是降低耦合性,不像之前的多进程,可能很多进程之间的服务不能通用,同时降低系统资源占用率。

参考

深入理解浏览器中的进程与线程
线程和进程的区别是什么? - biaodianfu的回答 - 知乎

@wqhui wqhui changed the title 浏览器进程和线程 浏览器的进程和线程详解 Mar 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant