五千年(敝帚自珍)

主题:【原创】浏览器是怎么变成操作系统的 -- 美人他爹

共:💬233 🌺560
全看分页树展 · 主题 跟帖
家园 说每个tab一个进程不完全对

实际上chrome有4种模式(Chromium Process Model):

1. Process-per-site-instance 这个是默认的模式,每个进程支持一个站点实例。一个站点实例就是从同一个页面展开的同一个站点的所有页面的集合。

2. Process-per-site 每个站点使用一个进程,而不管是不是从同一个页面展开的。

3. Process-per-tab 这个就是前面说的那种情况,每个tab使用一个进程。

4. Single process 单进程多线程,和IE7/8、Firefox一样。

不过里面也有一些优化处理。比如资源充裕的时候使用Process-per-tab,当同一个站点的页面达到一定数量的时候在转成Process-per-site-instance。

默认使用Process-per-site-instance或Process-per-site时,如果一个页面导致render进程崩溃,同一个进程支持的页面都会崩溃。呵呵,这个邓侃也说了。

安全是Chrome使用进程而不是线程的一个原因。现代操作系统给进程间通信的安全性提供了很好的支持,不容易通过crack IPC访问到另一个进程的内存空间。

Chrome使用sandbox来保护render进程。sandbox技术不太了解,好像就是从操作系统的层次限制render进程的操作,减小render进程崩溃时造成的损失。不过对于plugin进程,Chrome好像还没有使用sandbox,而且现在很多页面崩溃的情况都是plugin造成的(想起来泥砖给出的flash崩溃的解决办法:装一个flash blocker囧)plugin和extension终究还是浏览器的短板啊(IE满脸泪痕)

使用进程还有一个好处就是可以利用操作系统来回收资源。IE的老毛病就是会有内存泄漏,主要都是DOM tree的操作造成的。在IE7/8上,漏了就漏了,等到整个浏览器关掉的时候一起交给Windows回收吧。Chrome稍微积极一点,当一个页面关闭或者跳转到另一个页面的时候,有机会通过关闭对应的render进程让操作系统把东东都收回去。这是个懒办法,用不着操心那么多线程管理和内存管理,但是不失为一个好办法,呵呵

现代操作系统对进程的支持还是很强大滴。内存管理、IPC、安全都有比较成熟的方案。sandbox这样的东西windows从2k就开始支持啦,差点就被MS层出不穷的技术给埋没啦。Google拿着洛阳铲刨出来乐呵呵的拿回家自己用啦。MS沉默无语,回家翻箱倒柜折腾出一个Gazelle来,据说强大滴狠,就是不知道啥时候能有产品出来。还是要表扬一下MS滴,好多技术都是MS折腾出来的,可总是墙内开花墙外红。唉,MS开发的不是产品,是寂寞啊

关键词(Tags): #Chrome#Sandbox#多进程
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河