不二如是 发表于 2020-2-6 12:44:01

03 - 多线程架构

本帖最后由 不二如是 于 2020-2-6 13:44 编辑

在 00 讲中打开一个页面,为什么有多个线程?

今天就能解开谜题:



Chrome 的发展是滚滚向前的,相较之前,目前的架构又有了很多新的变化。

最新的 Chrome 浏览器包括:

1 个浏览器(Browser)主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个插件进程。
简单的逐个分析下这几个进程的功能。


浏览器进程

主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。


渲染进程

核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页。

排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中。

默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。

出于安全考虑,渲染进程都是运行在沙箱模式下。


GPU 进程

其实,Chrome 刚开始发布的时候是没有 GPU 进程的。

而 GPU 的使用初衷是为了实现 3D CSS 的效果。

只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。

最后,Chrome 在其多进程架构上也引入了 GPU 进程。


网络进程

主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的。

最近才独立出来,成为一个单独的进程。


插件进程

主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。

讲到这里,现在你应该就可以回答文章开头提到的问题了:

仅仅打开了 1 个页面,为什么有多个进程?

因为打开 1 个页面至少需要:

**** Hidden Message *****
如果打开的页面有运行插件的话,还需要再加上 1 个插件进程。

不过凡事都有两面性,虽然多进程模型提升了浏览器的稳定性、流畅性和安全性。

但同样不可避免地带来了一些问题。


过多的资源占用

因为每个进程都会包含公共基础结构的副本(如 JavaScript 运行环境),这就意味着浏览器会消耗更多的内存资源。


复杂的体系架构

浏览器各模块之间耦合性高、扩展性差等问题,会导致现在的架构已经很难适应新的需求了。

对于上面这两个问题,Chrome 团队一直在寻求一种弹性方案。

既可以解决资源占用高的问题,也可以解决复杂的体系架构的问题。

为了解决这些问题,在 2016 年,Chrome 官方团队使用“面向服务的架构”(Services Oriented Architecture,简称 SOA)的思想设计了新的 Chrome 架构。



也就是说 Chrome 整体架构会朝向现代操作系统所采用的“面向服务的架构” 方向发展。

原来的各种模块会被重构成独立的服务(Service),每个服务(Service)都可以在独立的进程中运行。

访问服务(Service)必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚、松耦合、易于维护和扩展的系统。

更好实现 Chrome 简单、稳定、高速、安全的目标。

如果你对面向服务的架构感兴趣,可以去网上搜索下资料,这里就不过多介绍了。

Chrome 最终要把 UI、数据库、文件、设备、网络等模块重构为基础服务。

结论就是 Chrome 优化其灵活的弹性架构。

在强大性能设备上会以多进程的方式运行基础服务。

但是如果在资源受限的设备上,Chrome 会将很多服务重新整合到一个进程中,节省内存占用。



如果有收获,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

如果想看更多,请订阅 淘专辑(传送门)(不喜欢更要订阅{:10_297:} )

一个账号 发表于 2020-2-7 12:06:15

看看隐藏内容

tiaotiao123 发表于 2020-3-28 08:59:31

q

1220305267 发表于 2020-4-3 13:29:31

4个进程

Ruide 发表于 2020-5-20 12:27:32

多个进程

fumouren 发表于 2021-9-15 20:25:29

学习

Max472 发表于 2022-6-22 08:43:05

{:5_90:}
页: [1]
查看完整版本: 03 - 多线程架构