|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 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 个插件进程。
不过凡事都有两面性,虽然多进程模型提升了浏览器的稳定性、流畅性和安全性。
但同样不可避免地带来了一些问题。
过多的资源占用
因为每个进程都会包含公共基础结构的副本(如 JavaScript 运行环境),这就意味着浏览器会消耗更多的内存资源。
复杂的体系架构
浏览器各模块之间耦合性高、扩展性差等问题,会导致现在的架构已经很难适应新的需求了。
对于上面这两个问题,Chrome 团队一直在寻求一种弹性方案。
既可以解决资源占用高的问题,也可以解决复杂的体系架构的问题。
为了解决这些问题,在 2016 年,Chrome 官方团队使用“面向服务的架构”(Services Oriented Architecture,简称 SOA)的思想设计了新的 Chrome 架构。
也就是说 Chrome 整体架构会朝向现代操作系统所采用的“面向服务的架构” 方向发展。
原来的各种模块会被重构成独立的服务(Service),每个服务(Service)都可以在独立的进程中运行。
访问服务(Service)必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚、松耦合、易于维护和扩展的系统。
更好实现 Chrome 简单、稳定、高速、安全的目标。
如果你对面向服务的架构感兴趣,可以去网上搜索下资料,这里就不过多介绍了。
Chrome 最终要把 UI、数据库、文件、设备、网络等模块重构为基础服务。
结论就是 Chrome 优化其灵活的弹性架构。
在强大性能设备上会以多进程的方式运行基础服务。
但是如果在资源受限的设备上,Chrome 会将很多服务重新整合到一个进程中,节省内存占用。
如果有收获,别忘了评分 :
如果想看更多,请订阅 淘专辑( 传送门)( 不喜欢更要订阅 ) |
|