斗皮迷们,现在正是求职旺季,金银金。前端面试你可能会遇到一个关于浏览器的知识点,《Chrome浏览器为什么是多进程而不是单进程》,这篇文章帮你梳理知识点,让你更好的理解~一年了计划在春季,祝正在找新工作的你,offer手软,财源滚滚~下面让我们开始阅读吧。本文作者:hmj不是黄焖鸡。首先你要知道进程和线程的关系是进程中任何一个线程出错,都可能导致整个进程崩溃。进程中的数据在线程之间共享。进程之间的内容是相互隔离的。如果一个进程崩溃或挂起,它不会影响其他进程。进程间通信是通过IPC机制进行的。当进程关闭时,操作系统回收进程占用的内存。浏览器有单进程架构和多进程架构。单进程架构的浏览器所有功能模块运行在同一个进程中,可能导致浏览器不稳定、不流畅、不安全。不稳定的单进程浏览器的功能模块运行在同一个进程中,以多线程的方式运行。如果一个线程崩溃或出现问题,可能会导致整个进程崩溃。比如javascript环境运行在页面线程中,可能会因为代码的意外崩溃导致整个浏览器崩溃。不流畅的页面渲染、页面展示、JavaScript环境、插件等都运行在同一个页面线程中,也就是说一次只能执行一个任务。比如写死循环脚本在单进程浏览器页面运行,会独占页面线程,导致其他任务无法执行,导致整个浏览器失去响应,卡顿。另外,页面的内存泄漏也是造成卡顿的一个原因。不安全的插件或脚本通过浏览器获取系统权限,造成安全问题。Chrome的官方文档,多进程架构的浏览器,采用多进程让浏览器有更好的容错性、安全性和沙箱。因为操作系统可以提供方法来限制每个进程的能力,所以浏览器只能允许某些进程具有特定的功能。比如Chrome的Tab限制了系统文件的读写能力,但是多进程的浏览器有一个缺点就是进程的内存占用比较大,但是为了节省内存,Chrome会限制进程的数量开始。当进程数达到限制时,它将在一个进程中运行访问同一网站的选项卡。Chrome浏览器有哪些进程?BrowserProcess(浏览器进程),这是浏览器的主进程,主要负责地址栏,前进后退按钮,处理网络访问,文件访问等。RendererProcess,控制选项卡内所有内容的显示的网站。插件进程(PluginProcess),控制网站使用的所有插件。GPU(GPUProcess),独立于其他进程处理GPU任务,由于GPU处理来自多个应用程序的请求,并在同一个表面上绘制,所以分为不同的进程。网络进程(NetWorkProcess)负责加载页面的网络资源。它以前在浏览器进程中运行在一个线程中,但现在它是独立的。通过一道老套的面试题,简单梳理一下浏览器各个进程之间的工作和流程。在Chrome浏览器的地址栏中输入URL后会发生什么?输入地址时,浏览器进程中的UI线程会决定是搜索内容还是搜索URL。当用户确认输入内容后,UI线程会将URL转发给网络进程,网络进程会发起网络请求并等待响应。网络进程接收响应头数据,解析响应头,转发给浏览器进程。浏览器进程收到响应头数据后,向渲染进程发送CommitNavigation消息。渲染进程开始准备接收HTML数据,通过与网络进程建立数据管道接收数据。渲染进程会反馈给浏览器进程“确认提交”,告诉浏览器进程已经准备好接收页面数据了。浏览器进程删除旧文档并更新页面状态。面向服务的架构我们在Chrome的任务管理器中可以看到,Chrome已经在朝着这个方向发展。网络服务、存储服务等已经是面向服务的,这样这些功能既可以运行在不同的进程中,也可以合并到一个单独的进程中。结束
