浏览器进程架构

浏览器漫长的发展历程中,伴随着进程架构的不断更新迭代。从单进程架构、多进程架构到面向服务架构,目前还在不断过渡。

浏览器中的任务

  • 浏览器自身
  • 页面渲染(打开新的页面就需要进行新的页面渲染)
  • 插件
  • 网络请求
  • gpu渲染
  • audio、video
    浏览器所需执行的任务会随着场景不断增多。

单进程架构

单进程浏览器架构图
  • 所有任务都是在同一进程下执行,分发给多个线程。
  • 单个线程会执行一个或多个任务。

弊端

  • 不稳定

线程中任意一处线程出现问题会导致整个进程崩溃,可能会因为一个插件的问题、一个页面的问题影响到整个浏览器的使用。

  • 不流畅

单线程每个时刻只能执行一个任务,如果当前任务执行时间过长,会阻塞后续任务,造成页面卡顿。

  • 不安全

未对插件线程进行限制。插件通常可为C、C++程序,可获取到系统层级资源,进行读写操作,有安全隐患。而且,早期浏览器很多功能由插件实现。

多进程架构

多进程架构图

将之前各项任务划分到更多进程中。

  • 浏览器主进程

主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。

  • 渲染进程

负责页面的渲染,将html、css、javascript代码转换为用户可与之交互的页面。chrome的排版引擎blink和js运行引擎v8都在此进程中。为确保安全性,该进程至于沙箱模式(限制权限,不能对系统重要位置进行读写操作)中。

  • 网络进程

负责获取页面中远程资源的获取,从浏览器进程中独立出来。

  • 插件进程

负责插件的运行,通过这种方式与其他进程隔离,防止因插件崩溃导对浏览器和页面产生影响。

  • GPU进程

页面、chrome的UI界面由GPU渲染,GPU称为浏览器普遍的需求,引入了GPU进程。

弊端

以上的多进程和沙盒隔离解决了之前所述单线程所带来的弊端。

  • 使用多进程会带来更高的资源占用。
  • 各模块间耦合性高,架构过于复杂,难于扩展,很难满足新的需求。

面向服务的架构

  • 将原先的模块重构成服务,每个服务在独立的进程中运行。
  • 访问服务须使用定义好的接口,各个进程间通过IPC通信。
  • 从而实现了松耦合、易于扩展的目标。
  • Chrome 最终要把 UI、数据库、文件、设备、网络等模块重构为基础服务,类似操作系统底层服务。
  • Chrome 还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源受限的设备上,Chrome 会将很多服务整合到一个进程中,从而节省内存占用。


    面向服务的架构

你可能感兴趣的:(浏览器进程架构)