自学内容网 自学内容网

chromium和Blink引擎,内存的管理策略

1.性能

从性能角度来看,Google Chrome(基于 Chromium)与纯开源的 Chromium 的差异并不大,但仍存在一些细微的不同

2.内存占用过高

目前的主流浏览器(如 Google ChromeMozilla FirefoxMicrosoft EdgeSafari)都在不同程度上面临内存占用较高的问题。每个浏览器都采取了不同的架构和优化策略,但由于现代网页和 Web 应用程序的复杂性,尤其是涉及到大量 JavaScript 和多媒体内容的情况下,内存占用问题几乎是无法完全避免的。

主要浏览器的内存占用情况:

1. Google Chrome

Chrome 是目前使用最广泛的浏览器之一,采用了 多进程架构,即每个标签页、扩展和一些重要功能(如 GPU 加速、浏览器本身的 UI)都在独立的进程中运行。这种设计提高了浏览器的稳定性和安全性,但也导致了内存的消耗。尤其是在打开多个标签页、使用动态 Web 应用时,内存占用可能会很高。

  • 特点:内存占用相对较高,但提供了较好的性能、稳定性和兼容性。
  • 优化:Chrome 已经通过定期的更新来优化内存使用,如改进垃圾回收机制和内存管理,但由于其多进程设计,内存占用依然较为显著。
2. Mozilla Firefox

Firefox 与 Chrome 类似,也采用了多进程架构,但它的一些性能和内存管理方式有所不同。Firefox 的 Quantum 引擎(自 2017 年起推出)在提升浏览器速度和降低内存使用方面做出了很多优化。然而,尽管如此,Firefox 也可能在长时间运行或使用多个标签页时出现较高的内存占用,尤其是涉及到复杂的网页时。

  • 特点:相较于 Chrome,Firefox 在内存管理上有所改进,尤其是对内存泄漏的处理和垃圾回收的优化。但在某些情况下,它的内存占用也会逐渐上升。
  • 优化:Firefox 定期推出更新,优化内存使用和性能,尤其是对多进程架构的改进。
3. Microsoft Edge

Microsoft Edge 在最近几年也进行了大幅优化,特别是在 Chromium 引擎 迁移后,Edge 和 Chrome 变得非常相似。因此,Edge 的内存占用问题与 Chrome 类似,采用了多进程架构,也存在类似的内存管理和性能挑战。

  • 特点:由于基于 Chromium,Edge 的内存占用与 Chrome 相似,但微软也进行了一些针对 Windows 操作系统的优化,确保 Edge 更加高效。
  • 优化:Edge 在 Windows 平台上有一些针对操作系统优化的优势,减少了不必要的内存消耗。
4. Apple Safari

Safari 主要面向 macOS 和 iOS 用户,通常在 Apple 设备上表现较好。Safari 的内存管理通常较为高效,特别是在 macOS 上,由于其深度与操作系统的集成,使得 Safari 在内存占用上相对较轻。

  • 特点:Safari 相较于其他浏览器的内存占用较低,尤其是在 macOS 上,优化得比较好。但仍然会受到某些动态网页内容的影响。
  • 优化:Safari 的内存使用通常比 Chrome 和 Firefox 更高效,但在某些 Web 应用场景下,内存占用也会增加。

为什么这些浏览器都会面临内存占用问题?

  1. 多进程架构
    多进程架构是现代浏览器为了提高稳定性和安全性而采用的设计,每个标签页、扩展和部分核心功能都运行在独立的进程中。这种设计虽然能有效隔离崩溃和安全问题,但它也带来了更高的内存占用。
  2. Web 应用和复杂页面
    现代网页越来越复杂,包含了大量的动态内容、视频、图片、广告、JavaScript 和 Web 应用程序。这些都需要占用大量的内存来进行渲染和处理。
  3. 缓存和数据存储
    浏览器通常会缓存网页资源(如图片、CSS 和 JavaScript),以加快加载速度,但这些缓存会不断积累,增加内存使用。
  4. 内存泄漏问题
    尽管浏览器的开发者已经做了很多努力来避免内存泄漏,但某些扩展、网页和插件可能仍会存在内存泄漏的情况,导致内存占用逐渐增加。
  5. 后台进程
    很多浏览器都会保持后台进程,尤其是扩展和插件可能在浏览器不活跃时仍然在后台运行,消耗内存。

chrome和Edge的对比

  • Chrome:Chrome 使用的是 Blink 引擎,它基于 WebKit,是 Google 为 Chrome 浏览器和其他 Chromium 项目开发的。由于 Chromium 是一个开源项目,许多浏览器(包括 Edge)也基于它。
  • Edge:Microsoft Edge 自 2020 年起转为基于 Chromium 引擎,这意味着它与 Chrome 在技术架构上非常相似。与旧版的 EdgeHTML(之前版本的 Edge 使用的引擎)相比,Chromium 版本的 Edge 在兼容性和性能上有了显著提升。

Chrome 最初是基于 WebKit 引擎的,但在 2013 年,Google 开始使用自己开发的 Blink 引擎,这个引擎仍然是在 WebKit 的基础上进行改进和扩展的,但它已经与 WebKit 完全分离,成为了一个独立的项目。因此,Chrome 使用的是 Blink 引擎,而不是 WebKit

对于 Chromium,Chrome 实际上是基于 Chromium 项目的,而 Chromium 是一个开源浏览器项目,它本身也使用 Blink 引擎。简单来说,Chromium 是 Chrome 的开源版本,二者在许多方面非常相似,但 Chrome 除了开源代码外,还集成了 Google 的一些服务(比如 Google 更新机制、专有的安全机制等)。

所以总结一下:

  • Chrome 使用 Blink 引擎,而不是 WebKit。
  • Chromium 是开源的浏览器项目,也是 Chrome 的基础。

Chromium 引擎 其实并不存在

实际上,没有一个叫做 “Chromium 引擎” 的独立引擎。正确的说法是,Chromium 本身是一个开源的浏览器项目,它使用 Blink 引擎 来渲染网页。因此,ChromiumBlink 引擎 是相关联的,但它们指的是不同的东西。

Blink 引擎

Blink 是一个现代的网页渲染引擎,由 Google 开发,最初是基于 WebKit 引擎的。2013 年,Google 宣布从 WebKit 分离出来,创建了 Blink,引擎的目标是更加高效和模块化,并改善性能。

  • Blink 负责处理网页的渲染,包括解析 HTML、CSS,执行 JavaScript,布局页面等。
  • Blink 引擎 被广泛使用,尤其是在基于 Chromium 的浏览器中,比如 Google ChromeMicrosoft Edge(自 2020 年转为 Chromium 基础后)。
  • 由于 Blink 是一个开源引擎,很多其他浏览器(如 Opera、Vivaldi)也使用它。

Chromium 项目

Chromium 是一个开源项目,是 Google Chrome 的基础。它提供了浏览器的源代码,但不包含 Chrome 浏览器中的一些专有组件(比如自动更新、Google 服务集成等)。具体来说,Chromium 是一个浏览器框架,它包括以下核心组件:

  • Blink 引擎:处理网页渲染。
  • V8 引擎:处理 JavaScript 执行。
  • Chromium 其它组件:比如网络请求处理、用户界面、插件支持等。

虽然 Chromium 是一个开源浏览器项目,但它并不包含 Google 提供的专有功能。它只是一个基础,任何开发者都可以基于这个项目创建自己的浏览器,比如 Google ChromeBraveOpera 等都基于 Chromium 开发。

Chrome 与 Chromium 的关系

  • Chrome是Chromium的商业版或封闭版。Google 从 Chromium 项目中取出一些开源的代码,并添加了专有的功能,例如:
    • 自动更新机制
    • Google 的服务集成(如 Google 搜索、同步等)
    • 专有的安全功能(如沙盒、Google Safe Browsing)
  • Chromium 是完全开源的,任何人都可以下载并修改。

关系总结:

  • BlinkChromiumChrome 等浏览器使用的渲染引擎。
  • Chromium 是一个开源项目,是 Chrome 的基础,而 Chromium 自身并不包含 Google 的专有服务。
  • Chrome 是基于 Chromium 开发的,并在其基础上增加了专有功能。

具体来说,Edge 使用 Blink 引擎 来渲染网页,负责处理 HTML、CSS、布局和图像渲染等内容,而 V8 引擎 负责执行网页中的 JavaScript。除此之外,Edge 还使用了 Chromium 的其他核心组件,如:

  • 网络请求处理:处理网页请求、数据传输等。
  • 用户界面(UI)和扩展支持:提供浏览器的界面和支持浏览器扩展功能。
  • 安全功能:Chromium 提供了一些基础的安全机制(例如沙盒技术、防止恶意软件等),而 Edge 在此基础上也做了一些改进和优化。

浏览器的多进程

你的问题涉及到如何通过浏览器的多进程架构来激发操作系统利用多个核心。这里有几个关键点需要理清:

  1. 浏览器的多进程架构:浏览器通常会使用多进程架构来提高性能和稳定性。例如,Google Chrome 的架构中,每个标签页、每个插件、每个渲染进程都是一个独立的进程。这些进程与浏览器的主进程分开,形成了多进程环境。
  2. 操作系统如何识别并分配核心:操作系统不需要特定的“信号”来知道浏览器正在使用多个进程。浏览器通过操作系统的标准接口(如创建进程或线程的系统调用),自动请求操作系统为其启动多个进程。操作系统的任务调度器根据当前的系统负载和可用资源,决定如何分配这些进程和线程到不同的CPU核心上。

浏览器的多进程模式通过操作系统的标准进程创建系统调用来启动多个进程,而操作系统负责调度这些进程到不同的核心上。浏览器本身并不直接“激发”操作系统使用多个核心,而是依赖操作系统的调度机制,操作系统会根据当前的负载和可用核心自动决定如何分配这些进程和线程,从而实现多核心的利用。

浏览器只需要启动多个进程,操作系统就会根据其多核硬件资源和调度策略自动决定如何将这些进程和线程分配到多个核心上运行。

chrome进程的分配策略

1) 每个标签页一个进程
  • 标签页进程隔离:Chrome 采用了“每个标签页一个进程”模型来增强浏览器的稳定性和安全性。如果一个网页崩溃或挂起,只有该进程受影响,其他标签页和进程不会受到影响。

    然而,并不是每个标签页都必然会分配一个独立的进程。Chrome 会根据资源的使用情况和进程数目来调整策略。

2) 进程共享
  • 进程共享:如果多个标签页打开的网页属于同一个域名或同一应用,Chrome 有时会将它们放在同一个渲染进程中。这样做的目的是节省内存和其他资源。例如,当用户打开多个标签页访问同一网站时,浏览器可能会将这些标签页放入同一个进程中进行共享。

    这种共享进程的方式也可以减少进程的数量,从而减轻操作系统的负担,但会牺牲一定的隔离性。

分时调度和资源管理

Chrome 并不直接控制 CPU 核心的分配,它依赖于操作系统的调度器来分配 CPU 资源。然而,Chrome 确实有一个内部的任务调度器,它会对进程和线程进行管理。具体来说,Chrome 会:

  • 任务队列:每个进程有自己的任务队列,操作系统的调度器会决定在不同的 CPU 核心上运行这些任务。对于每个进程来说,操作系统会使用分时调度(time-sharing)的方法,将 CPU 时间片分配给不同的进程或线程。若某个进程需要更多 CPU 资源,它会在一个时间片内持续运行,直到时间片用尽或操作系统调度另一个进程。
  • 线程优先级:Chrome 还会根据任务的优先级,调度不同的线程。比如,UI 线程可能比后台线程具有更高的优先级。
  • 内存管理和回收:Chrome 还会通过垃圾回收、内存压缩等手段,减少内存的占用,从而使得进程能在有限的内存下更有效地运行。

进程隔离与安全性

多进程的架构不仅仅是为了性能和稳定性,更是为了增强安全性。Chrome 在每个渲染进程中隔离网页,这样即使某个网页受到攻击,攻击者也很难通过该进程影响其他标签页或浏览器本身。这种隔离也有助于防止跨站脚本攻击(XSS)等网络安全问题。


原文地址:https://blog.csdn.net/lf_1234/article/details/143581792

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!