购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.7 浏览器架构发展史

不知道大家是否遇到过这样的面试题:“浏览器是单进程还是多进程的?”在讨论这个问题之前,我们首先需要了解:什么是进程?什么是线程?这是理解浏览器架构所必需的基础知识。

1.7.1 进程与线程的基本概念

简而言之,进程就是软件或程序运行时的实例。举例来说,当你启动浏览器、QQ音乐或腾讯视频等应用软件时,系统会为它们各自创建一个进程,以便管理和执行软件程序的各项操作。进程不仅负责数据处理和运算逻辑的执行,还构成了一个运行环境,确保软件程序的顺畅运行。

而线程作为进程的组成部分,无法独立存在。线程的启动与管理完全依赖于进程。在一个进程中,可以并发运行多个线程,这种多线程并发机制旨在提高计算速度和程序执行效率。

接下来,我们进一步了解线程与进程之间的关系。

● 进程中可以运行多个线程,但任意一个线程出错都会导致整个进程崩溃。

● 进程中的线程可以共享进程中的数据。

● 进程间的内容是相互隔离的,但可以通过IPC机制进行通信。

● 进程关闭后,操作系统会回收进程所占用的内存。

综上所述,这些是对进程与线程的基本概念及其关系的概述。这一理论知识为我们深入了解浏览器架构奠定了坚实的基础,使我们能够更加深入地探索和理解浏览器的内部工作机制。

1.7.2 早期单进程浏览器

早期的浏览器只有一个进程(见图1-3),所有的功能模块都在这个进程中运行。那么,一个浏览器都有哪些功能模块呢?

● 页面线程。

● 插件线程。

● 网络线程。

图1-3 早期单进程浏览器架构图

早期的浏览器基本上包含以上三个核心功能模块,它们一起运行在一个进程中,应用自己的线程来进行执行代码和进行逻辑运算。然而,这样的架构会导致许多问题,例如:

● 稳定性差:由于插件是可以随意安装,一旦某个第三方插件崩溃,整个浏览器可能无法继续运行。

● 不流畅:所有功能都运行在一个进程中,当某个线程的模块正在执行时,可能会导致其他模块出现明显的卡顿。例如,当你打开百度浏览新闻,同时又尝试打开腾讯视频观看电视剧时,如果百度页面未能及时加载,它可能会持续影响腾讯视频页面的打开。这种情况确实令人感到不便。

● 不安全:主要的安全隐患通常与插件有关。插件可以用C语言编写,这使得它们能够访问计算机上的所有资源。更有甚者,通过浏览器的漏洞,插件可能获得系统权限。这种情况显然是我们不愿意看到的。

1.7.3 早期多进程浏览器

基于单进程浏览器带来的种种问题,2008年Google发布了多进程浏览器的架构设计,如图1-4所示。

从图1-4可以看到,早期的多进程架构拆分出了多个插件进程、多个渲染进程以及一个主进程。各个进程之间可以通过IPC进行通信(如果需要的话)。

图1-4 早期多进程浏览器架构图

通过这种设计,有效地隔离了插件和页面渲染等组件在未分割时可能带来的负面影响。即使出现问题,也仅限于各自进程的沙箱内,不会影响其他进程。主进程通过进程间通信(Inter-Process Communication,IPC)机制来协调插件进程和渲染进程的创建与销毁。

1.7.4 现代多进程浏览器

现在的多进程浏览器在早期的基础上,更细粒度地分离了功能进程,如图1-5所示。

图1-5 现代多进程浏览器架构图

从图1-5可以看到,现代浏览器的多进程架构是从主进程中分离出了网络进程和GPU进程,当涉及网络请求和接收(不仅包括HTTP协议的网络请求,还有许多其他应用层协议,例如WebSocket等)时,可以通过网络进程来执行调度逻辑;而当涉及复杂的动画渲染和页面绘制时,则会启动GPU进程。

进一步细化系统架构虽然可以在原有基础上提高安全性、稳定性和流畅性,但这样的架构往往会变得臃肿和庞大。这也意味着,这种浏览器架构可能会占用更多的系统资源,具有较高的耦合性,并且可扩展性较差。

1.7.5 未来浏览器架构浅析

基于现代浏览器的一些弊端,Chrome官方团队提出了面向服务的架构(Service-Oriented Architecture,SOA),如图1-6所示。大致的意思是说,原来的各个模块将独立成一个服务,每个服务可以独立地运行在不同的进程中,这些进程之间的互相访问必须通过IPC接口进行。基于这样的理念,旨在设计一个具有更高内聚性、低耦合性以及易于维护和扩展的系统。

图1-6 SOA浏览器架构图

这种架构虽然具有优势,但无疑会消耗较多的资源。因此,在资源受限的设备上,通常会采取降级策略,将多个服务合并到一个进程中,以实现优雅的降级处理。 GpEpWU+yRNSjhXbnD7isqGAVxuGkNhZ2NMNiTnySjsC8fMevFZaxpn0lYhxGIB26

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开