Chrome V8 系统架构

Chromium 多进程多线程架构

design-documents

https://www.chromium.org/developers/design-documents

https://www.chromium.org/developers/design-documents/multi-process-architecture

Inside look at modern web browser

https://developers.google.com/web/updates/2018/09/inside-browser-part1

https://developers.google.com/web/updates/2018/09/inside-browser-part2

https://developers.google.com/web/updates/2018/09/inside-browser-part3

https://developers.google.com/web/updates/2018/09/inside-browser-part4

浏览器解析过程

现代浏览器是一个及其庞大的大型软件,在某种程度上甚至不亚于一个操作系统,它由多媒体支持、图形显示、GPU 渲染、进程管理、内存管理、沙箱机制、存储系统、网络管理等大大小小数百个组件组成。

虽然开发者在开发 Web 应用时,无需关心底层实现细节,只需将页面代码交付于浏览器计算,就可以展示出丰富的内容。

但页面性能不仅仅关乎浏览器的实现方式,更取决于开发者的水平,对工具的熟悉程度,代码优化是无止尽的。

显然,了解浏览器的基本原理,了解 W3C 技术标准,了解网络协议,对设计、开发一个高性能 Web 应用帮助非常大。

当我们在使用 Chrome 浏览器时,其背后的引擎是 Google 开源的 Chromium 项目,而 Chromium 的内核则是渲染引擎 Blink(基于 Webkit)和 JavaScript 引擎 V8。

在阐述浏览器解析 HTML 文件之前,先简单介绍一下 Chromium 的多进程多线程架构(图 5),它包括多个进程:

一个 Browser 进程

多个 Renderer 进程

一个 GPU 进程

多个 NPAPI Render 进程

多个 Pepper Plugin 进程

而每个进程包括若干个线程:

一个主线程

在 Browser 进程中:渲染更新界面

在 Renderer 进程中:使用持有的内核 Blink 实例解析渲染更新界面

一个 IO 线程

在 Browser 进程中:处理 IPC 通信和网络请求

在 Renderer 进程中:处理与 Browser 进程之间的 IPC 通信

一组专用线程

一个通用线程池

chromium的多进程架构至少带来三点好处

  1. 避免单个页面的不响应或者奔溃影响整个浏览器的稳定性;
  2. 是当第三方插件奔溃时候不会影响页面或者浏览器的稳定性
  3. 方便了安全模型的实施,也就是说沙箱模型是基于多进程架构的, 其实,这很大程度上也是WebKit2产生的原因

通常来讲,chromium浏览器包括以下主要进程类型:

Browser进程:浏览器的主进程,负责浏览器界面的显示,各个页面的管理,其他各种进程的管理;

Render进程:页面的渲染进程,负责页面的渲染工作,WebKit的工作主要在这个进程中完成;

NPAPI插件进程:每种类型的插件只会有一个进程,每个插件进程可以被多个Render进程共享;

GPU进程:最多只有一个,当且仅当GPU硬件加速打开的时候才会被创建,主要用于对3D加速调用的实现;

Pepper插件进程:同NPAPI插件进程,不同的是为Pepper插件而创建的进程

Chromium浏览器的进程模型,包括以下特征:

browser进程和页面是分开的,这保证了页面的奔溃不会导致浏览器主界面的奔溃;

每个页面是独立的进程,这保证了页面之间相互不影响;

插件进程也是独立的,插件的问题不会影响浏览器主界面和页面;

GPU硬件加速进程也是独立的。 因为这么多的进程,开发者通常需要知道进程列表中的进程类别,这很简单,可以通过进程的命令行参数"--type"来识别。

有趣的是,就在我写下上面这段文字的时候,我的chrome浏览器的flash插件崩溃了,幸运的是其他一切都很好,感谢chrome的多进程模型!

how many processes google chrome will be opened when opening a new tab?

testing

https://www.chromium.org/developers/design-documents/multi-process-architecture

https://support.google.com/chrome/thread/2064254?hl=en

one process per tab

one per extension

one for GPU processes

一个tab/插件 开启一个 process renderer

Chrome 首次启动,开启 一个 process GPU ,两个 process helper ,两个 process rendere

refs

https://www.chromium.org/developers/design-documents/process-models

https://www.ituring.com.cn/book/miniarticle/40164

https://juejin.im/post/6844903701526642702

https://zhuanlan.zhihu.com/p/102128787

浏览器输入 URL 后发生了什么

https://zhuanlan.zhihu.com/p/43369093



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


Chrome V8 系统架构的更多相关文章

  1. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...

  2. Node.js和Chrome V8 引擎了解

    说起Node就不得不先介绍一个Chrome V8 引擎. 随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScr ...

  3. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  4. 千万pv大型web系统架构,学习从点滴开始

     架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 ...

  5. [网站性能1]对.net系统架构改造的一点经验和教训

    文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...

  6. 5G系统架构

    原文标题:迈向5G之路,颠覆性的5G系统架构?   本文部分图片,资料摘自<迈向5G C-RAN:需求.架构与挑战> 突如一夜春风来,随着Polar码与LDPC码作为5G编码候选方案,通信 ...

  7. 异构(兼容dubbo)SOA系统架构(.net)优化升级

    前面一片文章已经提到我司的异构(兼容dubbo)SOA系统架构,解决了不少技术痛点,也还算比较完善,也顺利推广开来. 但作为项目的开发者,自己产品的问题心里是清楚的,离自己满意还是有不小的距离. 在推 ...

  8. 【系统架构】IT职业技能图谱(点开大图查看)

    本文地址 1 程序开发语言综述 2 iOS开发工程师必备技能 3 运维工程师必备技能 4 前端工程师必备技能 5 大数据工程师必备技能 6 云计算工程师必备技能 7 安全工程师必备技能 8 移动无线测 ...

  9. [Architecture] 系统架构正交分解法

    [Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大 ...

随机推荐

  1. java画海报二维码

    package cn.com.yitong.ares.qrcode; import java.awt.BasicStroke;import java.awt.Color;import java.awt ...

  2. python -m http.server 搭建一个简易web下载服务器

    在打vulnhub靶场的时候遇到的一个问题 目录 一.进到需要发送的安装包目录 二.开启http服务 三.访问服务器 一.进到需要发送的安装包目录 比如设置一个专门发送,传输的文件的文件夹,cmd命令 ...

  3. NodeMCU获取并解析心知天气信息

    NodeMCU获取并解析心知天气信息 1 注册心知天气并获取私钥 打开心知天气网站,点击注册按钮 填写基本信息注册心知天气账号,登录注册所填写的邮箱点击链接进行账号激活,随后出现如下界面 点击登录按钮 ...

  4. JMM和volatile

    1.volatile 2.JMM 3.代码示例 package com.yanshu; class MyNmuber{ volatile int number=10; public void addT ...

  5. AtCoder Beginner Contest 176

    比赛链接:https://atcoder.jp/contests/abc176 A - Takoyaki #include <bits/stdc++.h> using namespace ...

  6. Codeforces Round #656 (Div. 3) C. Make It Good

    题目链接:https://codeforces.com/contest/1385/problem/C 题意 去除一个数组的最短前缀使得余下的数组每次从首或尾部取元素可以排为非减序. 题解一 当两个大数 ...

  7. 【uva 247】Calling Circles(图论--Floyd 传递闭包+并查集 连通分量)

    题意:有N个人互相打了M次电话,请找出所有电话圈(Eg.a→b,b→c,c→d,d→a 就算一个电话圈)并输出.(N≤25,L≤25,注意输出格式) 解法:由于N比较小所有n^2或n^3的复杂度都没有 ...

  8. hdu4778 Gems Fight!

    Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others) Total Submis ...

  9. codeforces578C. Weakness and Poorness

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  10. Codeforces Round #481 (Div. 3) D. Almost Arithmetic Progression (暴力)

    题意:有一个长度为\(n\)的序列,可以对所有元素++或--,求最少的操作次数,如果无论如何都不能构成,则输出\(-1\). 题解:一个等差数列一定由首项\(a_{1}\)和公差\(d\)来决定,而这 ...