概述
相信你一定有这样的经历:打开很多个页面,不幸的是其中某个页面不响应了或者崩溃了,随之而来的是更不幸的事,所有页面都不响应或者都崩溃了。最让人崩溃的是其中一些页面还有未保存或者未发送的信息!
这绝对是不堪回首的过去。但是,现在好了,现代浏览器很多都支持多进程模型,这个模型可以很好地避免上面的问题,虽然它很复杂而且也有自身的问题,例如更多的资源消耗,但是它的优势也是非常明显地。
chromium的多进程架构至少带来三点好处,其一是避免单个页面的不响应或者奔溃影响整个浏览器的稳定性;其二是当第三方插件奔溃时候不会影响页面或者浏览器的稳定性;其三是方便了安全模型的实施,也就是说沙箱模型是基于多进程架构的。其实,这很大程度上也是WebKit2产生的原因。那么,这是怎么做到的呢?
下图给出了缺省的chromium浏览器的进程模型。方框代表进程,连接线代表IPC进程间通信。
通常来讲,chromium浏览器包括以下主要进程类型:
- Browser进程:浏览器的主进程,负责浏览器界面的显示,各个页面的管理,其他各种进程的管理;
- Render进程:页面的渲染进程,负责页面的渲染工作,WebKit的工作主要在这个进程中完成;
- NPAPI插件进程:每种类型的插件只会有一个进程,每个插件进程可以被多个Render进程共享;
- GPU进程:最多只有一个,当且仅当GPU硬件加速打开的时候才会被创建,主要用于对3D加速调用的实现;
- Pepper插件进程:同NPAPI插件进程,不同的是为Pepper插件而创建的进程
Chromium浏览器的进程模型,包括以下特征:
- browser进程和页面是分开的,这保证了页面的奔溃不会导致浏览器主界面的奔溃;
- 每个页面是独立的进程,这保证了页面之间相互不影响;
- 插件进程也是独立的,插件的问题不会影响浏览器主界面和页面;
- GPU硬件加速进程也是独立的。 因为这么多的进程,开发者通常需要知道进程列表中的进程类别,这很简单,可以通过进程的命令行参数"--type"来识别。 有趣的是,就在我写下上面这段文字的时候,我的chrome浏览器的flash插件崩溃了,幸运的是其他一切都很好,感谢chrome的多进程模型!
模型的类型
其实介绍了进程模型,其实Chromium支持多种进程模型,特别是对页面而言,下面简单的介绍以下模型的类型:
Process-per-site-instance
该类型的含义是对同一个域的实例都会创建独立的进程。举个例子来讲,例如,用户访问了biandroid的CSDN博客(我的博客),然后从个人主页打开多篇文章时,每篇文章的页面都是该域的一个实例,因而它们都共享同一个的进程。如果新打开CSDN博客的主页,那么就是另一个实例,会重新创建进程来渲染它。这带来的好处是每个页面互不影响,坏处自然是资源的巨大浪费。
Process-per-site
该类型的含义是不同一个域会创建独立的进程,同一域的不同实例共享同一个进程。好处是对于不同的域可以共享,相对较小的内存消耗,坏处是可能会有特别大的Renderer进程。可以在命令行加入参数--process-per-site来尝试它。
Process-per-tab
该类型的含义是为每个标签页创建一个独立的进程,这也是chrome/chromium的缺省行为
Single process
该类型的含义是不为页面创建任何独立的进程,所有渲染工作都在browser进程中。但是这个类型只是实验性质的,不稳定,因而不推荐使用,只有在比较单进程和多进程时候比较有用,可以在命令行加入参数--single-process来尝试它。
沙箱模型
在页面的多进程模型中,页面的渲染是运行在沙箱模型中的Render进程中实现的,这些渲染引擎没有访问本地资源的能力(例如文件系统,窗口系统,等等),这可以保护渲染引擎被入侵。
参考文献
- http://www.chromium.org/developers/design-documents/process-models
相关推荐
"C#多进程浏览器-仿Chrome浏览器"是一个项目,它旨在模仿Google Chrome浏览器的设计理念,利用C#来实现一个支持多进程架构的浏览器。这个项目名为"MultiProcessArchitectureDemo-master",显然关注的是多进程架构这...
4. **多进程架构**:Chromium 采用多进程架构,每个标签页、插件、扩展等都运行在独立的进程中,以实现更好的安全性和稳定性。这种架构也被称为“沙箱”模型。 5. **网络堆栈**:Chromium 自带了一套完整的网络堆栈...
通过理解CEF的基础知识,常用接口和多进程模型,开发者可以构建出高效、安全的应用程序。然而,这只是CEF学习的一部分,深入研究CEF的高级通信技术,如Message传递,将进一步增强你的应用功能和用户体验。
WebView2 进程模型是基于 Microsoft Edge 浏览器的进程模型,使用 Chromium 体系结构。 WebView2 进程组是 WebView2 运行时进程的集合,包括单个浏览器进程、一个或多个渲染器进程和其他帮助程序进程。浏览器进程...
Chromium采用多进程架构,每个进程内有多个线程,如主线程、UI线程、IO线程等。线程间通信主要通过MessageLoop和Task Runner实现,这使得Chromium能够高效地处理并发任务,保证了浏览器的响应性和安全性。 **1. ...
- **多进程架构**:类似于Chromium浏览器,CEF3也支持多进程模型,提高应用的稳定性和安全性。 - **插件支持**:可以加载NPAPI或Pepper插件,扩展应用程序的功能。 - **本地资源访问**:允许应用程序访问本地文件...
首先,CEF的多进程架构是基于Google Chrome的多进程模型,它包括以下几个主要进程: 1. **Browser进程**:负责处理用户界面,如窗口管理、网络请求和JavaScript执行。 2. **Renderer进程**:用于渲染网页内容,执行...
- 沙盒可以限制进程访问文件系统、网络以及其他敏感资源。 - 提供了一种安全的方式来运行不受信任的代码,减少了潜在的安全风险。 #### 第12篇 Web开发须知的浏览器内幕:缓存与存储篇(1) - **缓存与存储概述*...
2. **多进程架构**:遵循Chromium的多进程模型,提供更好的安全性和稳定性,因为每个网页在单独的进程中运行。 3. **API接口**:为开发者提供了C++ API,用于控制和自定义浏览器功能,如导航、加载资源、处理...
在探索 Chrome 源码时,需要了解它的多进程模型、线程模型、进程间通信机制、插件模型、整体框架设计、跨平台 UI 控件系统、V8 引擎等技术要点。 Chrome 的多进程模型是它的一大特色,包括一个主进程(Browser ...
9. Chromium 的多进程架构(MultiProcessArchitecture):以多进程的方式来提高渲染性能和安全性的架构。 10. GPU进程(GPUProcess):为了提高性能和隔离性,Chromium将图形处理放在独立的GPU进程上进行。 11. ...
1. **隐私与安全**:Chromium提供沙盒机制,每个标签页都在独立的进程中运行,降低因恶意代码攻击而导致整个浏览器崩溃的风险。同时,它支持HTTPS和安全浏览功能,帮助用户识别并防范钓鱼和恶意网站。 2. **自动...
为了充分利用CEF,开发者应该熟悉Chromium的生命周期管理和多线程模型,因为CEF是基于Chromium的多进程架构,包括浏览器进程、渲染进程和GPU进程等。此外,理解CEF的异步通信机制,如Message Loop和Render Process ...
7. **多线程**:理解CEF中的线程模型很重要,避免在不合适的线程上执行操作,以防止线程安全问题。 8. **内存管理**:由于CEF是C++库,需要遵循C++的内存管理规则,确保正确释放分配的内存。 9. **更新策略**:CEF...
此外,CEF还支持多线程模型,使得复杂的UI更新和网络操作可以在后台线程中进行,避免阻塞用户界面。 为了充分利用这个压缩包,开发者需要了解CEF的API和Chromium的渲染机制。他们需要将CEF库与自己的应用程序链接,...
- **CEF2**:引入了多进程模型,基于Chromium浏览器,提高了稳定性,但API使用相对复杂。 - **CEF3**:也是多进程,调用Chromium的Content API,提供更好的性能和更多的功能。 使用CEF的API步骤如下: 1. 通过...
IPC是多进程系统中不同进程之间交换信息的方式,常见的IPC方式有管道、套接字、共享内存等。 - **Mojo**:CEF使用Google的Mojo作为其底层的IPC机制。Mojo提供了一种安全、高效的跨进程消息传递方式,可以确保数据在...
3. **多进程架构**:遵循Chromium的多进程模型,提高应用的稳定性和安全性。 4. **丰富的API**:提供丰富的C++接口,使得与Web内容交互变得简单。 5. **本地化支持**:可以轻松实现应用程序的国际化和本地化。 在...