豆皮粉儿们,又到了金三银四的求职淡季,明天这一期由字节跳动数据平台的“hmj 不是黄焖鸡”,给大家分享前端面试中可能会遇到一个对于浏览器的知识点“Chrome 浏览器为什么是多过程而不是单过程”,该文帮大家梳理了知识点内容,让你们能更好的了解~
一年之计在于春,祝正在找新工作的你们,offer 拿到手软,money 多多~ 上面👇就让咱们开始浏览吧。
本文作者:hmj 不是黄焖鸡
首先须要晓得,过程和线程之间的关系是
- 过程中的任一线程出错,都可能导致整个过程的解体。
- 线程之间是会共享过程中的数据。
- 过程之间的内容是互相隔离的,如果一个过程解体或者挂起了,是不会影响其余过程的。过程间通信是通过 IPC 机制。
- 当过程敞开后,操作系统会回收过程所占用的内存。
浏览器存在单过程架构、多过程架构
单过程架构的浏览器
所有的功能模块都是运行在同一个过程里的,可能会导致浏览器不稳固、不晦涩和不平安。
- 不稳固
单过程浏览器的功能模块运行在同一过程中,采纳多线程的形式运行,如果有一个线程解体或者呈现问题,就可能会导致整个过程解体。例如 javascript 环境是运行在页面线程中的,可能会因为代码的意外解体导致整个浏览器解体。 - 不晦涩
页面渲染、页面展示、JavaScript 环境、插件等都是运行在同一个页面线程中,意味着同一时刻只能有一个工作能够执行。例如编写一个无线循环的脚本运行在单过程浏览器页面中,会独占页面线程,导致其余工作无奈执行,会导致整个浏览器失去响应、卡顿。另外页面的内存泄露也是造成卡顿的一个起因。 - 不平安
插件或者脚本通过浏览器获取零碎权限,引发平安问题。
多过程架构的浏览器
Chrome 的官网文档
采纳多过程能够使浏览器具备更好的容错性,提供安全性和沙盒性。因为操作系统能够提供办法限度每个过程领有的能力,所以浏览器能够让某些过程只能具备特定的性能,例如 Chrome 的 Tab 限度了对系统文件的读写能力,
然而多过程的浏览器有一个毛病,就是过程的内存占用绝对更多,然而 Chrome 为了节俭内存,会限度被启动的过程数,当过程数达到界线后,会将拜访同一个网站的 tab 都放在一个过程里运行。
Chrome 浏览器有哪些过程呢
- 浏览器过程(Browser Process),这个是浏览器的主过程,次要负责包含地址栏、后退后退按钮、解决网络拜访、文件拜访等。
- 渲染过程(Renderer Process),管制显示网站的选项卡内的所有内容。
- 插件过程(Plugin Process),管制网站应用的所有插件。
- GPU(GPU Process),与其余过程隔离解决 GPU 工作,因为 GPU 解决来自多个应用程序的申请并将它们绘制在同一外表上,因而将其分为不同的过程。
- 网络过程(NetWork Process),负责页面的网络资源加载,之前是放在浏览器过程中的一个线程运行,当初独立进去。
通过一个陈词滥调的面试题简略梳理下浏览器各个过程之间的工作和流程
Chrome 浏览器地址栏输出一个 URL 后产生了什么?
- 在输出一个地址的时候,浏览器过程中的 UI 线程会去解析是搜寻内容还是 URL。
- 当用户确认输出内容,UI 线程会将 URL 转发给网络过程,网络过程会发动网络申请期待响应。
- 网络过程接管到响应头数据,解析响应头,并转发给浏览器过程。
- 浏览器过程接管到响应头数据后便发送 CommitNavigation 音讯到渲染过程。
- 渲染过程开始筹备接管 HTML 数据,通过和网络过程建设数据管道接收数据。
- 渲染过程会反馈给浏览器过程“确认提交”,告知浏览器过程曾经筹备好接管页面数据。
- 浏览器过程移除之前的旧文档,更新页面状态。
面向服务化的架构
在 Chrome 的工作管理器中咱们能够看到,Chrome 曾经在朝着这个方向变动,network service、storage service 等都曾经是服务化,这样这些性能既能够放在不同的过程外面运行也能够合并为一个独立的过程。
The End