进程和线程
进程就是一个程序运行的实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。
进程和线程之间的关系有一下4个特点:
进程中的任意一个线程执行出错,都会导致整个进程崩溃。
线程之间共享进程中的数据。
当一个进程关闭之后,操作系统会回收进程所占的内存。
- 当一个进程退出时,操作系统会回收该进程所申请的所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收。
进程之间的内容互相隔离。
早期的浏览器为单进程
单进程导致了一系列的问题:不稳定、不流畅、不安全;插件或者渲染等线程容易崩溃导致整个进程崩溃;内存泄漏导致进程变慢;插件和页面脚本能获取操作系统任意资源。
早期多进程架构
最新的Chrome浏览器
1个浏览器(Browser)主进程、1个GPU进程、1个网络(NetWork)进程、多个渲染进程和多个插件进程。
- 浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
- 渲染进程。核心任务时将HTML、CSS、和JavaScript转换为用户可以与之交互的网页,排版引擎Blink和JavaScript引擎V8都是运行在该进程中,默认情况下,Chrome会为每个Tab标签创建一个渲染引擎。出于安全考虑,渲染进程都是运行在沙箱模式下的。
- 网络进程。主要负责页面的网络资源加载,之前时作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
- 插件进程。主要时负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
多进程导致的问题
资源占用更高。
更复杂的体系架构。
未来面向服务的架构
为解决多进程导致的问题,Chrome团队正在寻找一种弹性方案,既可以解决资源占用高的问题,也可以解决负责的体系架构问题。
Chrome官方团队使用“面向服务的架构”思想设计了新的Chrome架构。