内容:1.问题背景2.进程与线程3.多进程浏览器架构4.未来面向服务的架构1.问题背景:当我们打开一个Chrome浏览器页面,可以通过更多工具-任务管理器查看浏览器当前启动的进程。这时候你会发现一个有趣的现象,就是只打开了一个选项卡,浏览器却有四个进程在执行。为什么是这样?2.进程和线程在深入研究之前,我们先要梳理一下进程和线程的概念和关系1)进程是一个程序的运行实例2)线程依附于进程,需要由进程来启动和管理进程,使用多线程并行处理可以提高计算效率3)进程中任何一个线程出错都会导致整个进程崩溃4)进程的内容相互隔离,但进程中的线程共享当前进程的数据5)当一个进程关闭时,操作系统会回收该进程占用的内存3.多进程浏览器架构目前主要的两种浏览器架构是单进程浏览器架构和多进程浏览器建筑学。单进程浏览器是指浏览器的所有功能模块都运行在同一个进程中,这些模块包括网络、插件、JavaScript运行环境、渲染引擎和页面等。如此多的模块集中在一个进程中,导致三个致命缺陷:1)不稳定性:早期的浏览器需要插件来实现强大的功能,例如网络视频、网络游戏,但插件非常不稳定,一旦插件-in错误发生,会导致整个浏览器崩溃;2)不流畅:一次只能执行一个模块,如果一个循环脚本占用线程,渲染等其他进程会被阻塞,导致浏览器无响应,卡死;3)无安全性:通过更改插件的代码,可以获得操作系统的任何资源。早期的多进程浏览器将进程分为三类进程,相互隔离。浏览器主进程:负责下载进程、管理进程间通信等渲染进程:插件进程负责解析、渲染、JS代码执行:独立执行各种插件功能通过多进程机制,如何解决上述问题:不稳定问题:由于进程之间是相互隔离的,单个页面或单个进程的崩溃不会影响其他页面/其他进程不流畅。问题:每个页面都有单独的渲染进程,不会互相影响和阻塞。不安全:多进程架构引入了**safesandbox**的机制,相当于操作系统为进程加了把锁,进程可以运行,但是不能往硬盘写数据,也不能读取敏感数据。目前的多进程架构又将进程进一步划分为几个进程:浏览器进程:负责界面展示、用户交互等渲染进程:核心任务是将HTML、CSS、JS渲染成可被用户交互的网页用户GPU进程:实现CSS动画绘制、GPU加速等功能,运行时需要插件进程隔离,防止插件崩溃。虽然前面的问题都解决了,但是现在的浏览器架构也带来了其他问题:1)更高的资源占用:更多的进程对应更多的内存资源占用2)更复杂的架构:各个进程模块相互独立,导致性能差架构的可扩展性,难以适应新的需求。这就可以回答原来的问题,为什么一个tab页可以启动四个进程?答:因为现在的浏览器采用的是多进程架构,而且现在的多个进程之间有明确的分类和隔离。4、未来面向服务的架构未来Chrome的整体架构将面向现代操作系统所采用的“面向服务的架构”。在发展方向上,原有的模块将重组为独立的服务(Service),每个服务(Service)可以运行在一个独立的进程中,访问服务(Service)必须使用定义的接口通过IPC进行通信,从而构建一个更具内聚性、松散耦合、易于维护和扩展的系统。目前这个还处于发展阶段,也是我们前端需要跟进和学习的方向。
