博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Multi-process Architecture》浏览器多进程架构 笔记
阅读量:2123 次
发布时间:2019-04-30

本文共 1757 字,大约阅读时间需要 5 分钟。

学习资料:

学习进度跟踪

  • 2021.06.12晚。在 中了解过chrome多进程架构有哪些多进程,以及为什么是多进程架构。这篇document可以帮助我更详细地了解!
  • 2021.06.13下午。官方文档介绍的架构级顶层的内容,没有过多的实现细节。对于我这样的小白去理解和学习,是非常有帮助的。Finish!

Problem

不可能有一个完美,安全,不crash的render engine

对于浏览器进程来说,如果是单进程多线程的操作,比如一个plugin的报错,就会导致整个浏览器崩溃,显然是不合理的

现代操作系统是健壮的,因为每个进程之间是互相独立了,A进程崩溃,并不会影响其他进程 或者 操作系统


架构概览

每一个标签页是一个新的Process,这样可以避免因为Render Engine Crash导致的影响。同时,也限制Render Process对其他Process的资源访问,在一定程度上,通过内存保护和访问控制,给OS带来了好处

运行UI和管理Plugin Process,一般被称为Browser Process。Tab Process也称为Render Process


管理Render Process

每一个Render Process有一个进程全局变量,叫RenderProcess Object,通过IPC(Inter-Process Communication)Render Process与Browser Process的数据交互。对于每一个RenderProcess,在Browser Process中会有一个对应的RenderProcessHost


管理Views

每一个Render Process通过该进程唯一的RenderProcess Object,管理 一个或者多个 Render View。这些View和对应的Tab相对应(TODO)。RenderProcess Object对应的RenderProcessHost下也一一对应了RenderViewHost。Render Process中的每一个RenderView都有一个该进程唯一的ID

对于Browser Process一个ID还不够,因此还需要RenderProcessHost。有点像一层一层进行管理

通过RenderViewHost对象,可以在Browser Process中指定一个tab页,并通过 Browser Process的RenderViewHost Object 进行数据传输


组件和接口

Render Process

  • Render Process通过RenderProcess Object 使用 IPC进程间通信,和Browser Process交换数据
  • Render View通过RenderProcess Object,和BrowserProcess对应的RenderViewHost Object进行数据通信,以及WebKit layer的数据通信。Render View Object对应一个标签页的Render Conent

Browser Process

  • Browser Object代表浏览器的最顶层的应用窗口
  • RenderProcess Host代表单个标签页 和 对应Render Process交互。他们是一一对应的关系
  • RenderView Host同理

共享Render Process

通常来说,一个新的标签页会对应一个新的Render Process,Browser Process指示Render Process 创建新的RenderView。有时候RenderProcess之间需要共享性能,提高效率,类似联合编译


检测崩溃和异常行为

Render Process如果崩溃了,会通过IPC给Browser Process 发送崩溃协议。Browser发现对应的渲染进程挂了,那就再起一个


沙盒渲染

通过沙盒环境,限制Render Process的权限仅能通过Browser Process执行,保证程序安全,防止恶意程序破坏系统


回收内存

如果一个tab不被用户所看到,那么可以减低它的内存开销。简单来说,更合理地分配系统内存


插件进程

插件会单独起进程

 

转载地址:http://wkcrf.baihongyu.com/

你可能感兴趣的文章
剑指offer 27.二叉树的深度
查看>>
剑指offer 29.字符串的排列
查看>>
剑指offer 31.最小的k个树
查看>>
剑指offer 32.整数中1出现的次数
查看>>
剑指offer 33.第一个只出现一次的字符
查看>>
剑指offer 34.把数组排成最小的数
查看>>
剑指offer 35.数组中只出现一次的数字
查看>>
剑指offer 36.数字在排序数组中出现的次数
查看>>
剑指offer 37.数组中重复的数字
查看>>
剑指offer 38.丑数
查看>>
剑指offer 39.构建乘积数组
查看>>
剑指offer 57. 删除链表中重复的结点
查看>>
剑指offer 58. 链表中环的入口结点
查看>>
剑指offer 59. 把字符串转换成整数
查看>>
剑指offer 60. 不用加减乘除做加法
查看>>
leetcode 热题 Hot 100-3. 合并两个有序链表
查看>>
leetcode 热题 Hot 100-4. 对称二叉树
查看>>
Leetcode C++《热题 Hot 100-12》226.翻转二叉树
查看>>
Leetcode C++《热题 Hot 100-13》234.回文链表
查看>>
Leetcode C++《热题 Hot 100-14》283.移动零
查看>>