多进程的浏览器
对QQ浏览器的测试:
在打开八个网页页面之后,在任务管理器界面察看详细信息:
可以得知现在的浏览器应该都是多进程实现的。
那么为什么使用多进程来实现浏览器?
首先看一下进程与线程的区别:
**进程:**作为系统资源分配的最小单位。每创建一个进程,系统就会为其开辟地址空间,创建唯一的PID,并且建立数据表来维护代码段、堆栈段和数据段。
**线程:**作为CPU调度,也就是程序执行的最小单元。线程依托于进程,也是轻量级的进程,每一个进程都至少有一个线程,并且同一进程中的多个线程共享进程的地址空间,但是它拥有自己的栈空间、寄存器。
所以,从空间分配来看,进程之间的地址空间无疑是独立的,而线程之间则不一样。
那么它们的这点区别为什么会让众多的浏览器使用多进程来实现呢?
原因在于:如果使用多线程来实现一个浏览器架构,那么当其中一个页面(多标签浏览器)崩溃,会导致整个进程崩溃,也就是浏览器当前所有界面都崩溃掉。而多进程实现的浏览器则有很好的健壮性,一个页面坏死,并不会影响其它的页面。
对于Chrome而言,它的多进程分为三个模块:
-
浏览器(browser):负责管理用户界面以及磁盘和网络的I/O。当Chrome启动时,就会创建一个新的浏览器进程。
-
渲染器(renderer):包含渲染网页的逻辑。因此,它们包含逻辑,以便处理HTML、JavaScript、图像等等。一般情况下,对应于新标签的每个网站都会创建一个新的渲染进程,这也就是我们之前所看到的任务管理器中多个活跃的浏览器进程的原因。
-
插件(plugins):每个插件都会占有进程(如Flash或QuickTime等),一般而言,插件进程不但包含本身代码,而且包含额外代码,以便与有关渲染进程和浏览器进程进行通信。
此外,渲染进程是运行在沙箱当中的,为了保护用户系统的安全。