1475 字
4 分钟
Google浏览器V8引擎概览
Google Chrome(基于 Chromium)最核心的设计是 「多进程架构 + 服务化拆分」
Web API、任务队列、事件循环、V8、Blink 全都分布在这些进程和模块里。
通过了解 「5大核心进程 + 内部关键模块 + 它们如何协作」 摸清楚哪些在浏览器、哪些在 V8、谁管异步、谁管渲染。
一、Chrome 五大核心进程(全局架构)
Chrome 启动后,至少会有这 5 类独立进程,各自隔离、互不干扰。
1. 浏览器主进程(Browser Process)—— 全局总管
数量:1个(唯一) 地位:Chrome 的大脑、总指挥
负责内容:
- UI 界面:窗口、标题栏、地址栏、书签、菜单、下载栏、设置页
- 用户交互:鼠标点击、键盘输入、滚动、窗口缩放
- 子进程管理:创建/销毁/监控渲染进程、GPU 进程、网络进程
- 资源代理:文件读写、本地存储(Cookie/LocalStorage/IndexedDB)、密码管理
- 安全与扩展:扩展程序(Extensions)、沙箱控制、安全浏览(Safe Browsing)
- 进程间通信(IPC):所有进程之间的消息转发(用 Mojo 通信)
核心作用: 不渲染页面、不执行 JS,只做「协调、管理、安全、界面」,保证单个页面崩溃不会拖垮整个浏览器。
2. 渲染进程(Renderer Process)—— 页面内核(我最关心)
数量:N 个(每个标签/站点一个) 地位:真正执行网页代码、生成页面的地方
内部核心模块(重中之重):
(1)Blink 渲染引擎(浏览器内核)
- 源自 WebKit(2013 年从 WebKit 分叉)
- 负责:
- 解析 HTML → 生成 DOM 树
- 解析 CSS → 生成 CSSOM 树
- DOM + CSSOM → 合成 Render Tree(渲染树)
- Layout(重排/回流):计算元素位置、大小
- Paint(重绘):绘制元素颜色、背景、边框
- 事件循环、DOM 事件、Web API(setTimeout/ fetch / DOM 事件)
- 任务队列、微任务队列(浏览器维护,不是 V8)
(2)V8 JavaScript 引擎
- 位置:运行在渲染进程内部
- 只负责:
- 编译/执行 JS 代码
- 调用栈(Call Stack)
- 执行上下文、作用域、闭包、GC 垃圾回收
- Promise 语法(但 微任务队列由浏览器维护)
(3)渲染进程内部多线程
- 主线程:执行 JS、解析 HTML/CSS、Layout、Paint(单线程!)
- 合成线程(Compositor):图层合成、交给 GPU
- 栅格线程(Raster):把图层转成位图
- Worker 线程:Web Worker、Service Worker(后台 JS,不阻塞主线程)
核心作用: 把 HTML + CSS + JS → 可视化网页,运行在 沙箱(Sandbox) 中,无法直接访问系统、文件、网络,只能通过主进程代理。
3. GPU 进程(GPU Process)—— 图形加速
数量:1个
负责内容:
- 浏览器 UI 绘制(窗口、按钮)
- 网页图形:CSS 3D、动画、Canvas、WebGL、视频硬解
- 图层合成(Compositing):把渲染进程的多个图层合并显示
- 与显卡驱动直接通信,硬件加速
核心作用: 把所有绘制交给 GPU 并行处理,不占用主线程,保证滚动、动画流畅。
4. 网络进程(Network Process)—— 网络管家
数量:1个(M73+ 独立,以前在主进程)
负责内容:
- 所有网络请求:HTTP/HTTPS/HTTP2/QUIC/WebSocket
- DNS 解析、TCP 连接、TLS 握手
- Cookie、缓存(HttpCache)、代理、CORS
- 下载、上传、网络安全检测
核心作用: 统一处理所有网络,渲染进程不能直接联网,必须通过网络进程,提升安全与性能。
5. 插件/工具进程(Plugin / Utility Process)
数量:N 个
- 插件进程:Flash、PDF 阅读器等第三方插件(现在很少)
- 工具进程:视频解码、音频播放、沙箱工具、扩展辅助
作用: 彻底隔离第三方代码,崩溃不影响主程序。
二、一句话分清:V8 vs 谷歌浏览器
-
V8 引擎:只在 渲染进程 里
- 管:JS 执行、调用栈、执行上下文、GC
- 不管:事件循环、任务队列、Web API、网络、定时器、DOM
-
浏览器(Chrome):
- 管:事件循环、任务队列、微任务队列、Web API(setTimeout/fetch/DOM)
- 管:所有进程、网络、GPU、UI、安全、存储
- V8 只是浏览器调用的一个“执行库”
三、完整流程:从输入 URL 到显示页面(串起所有模块)
- 主进程:你输入 URL → 交给 网络进程
- 网络进程:DNS → TCP → TLS → 请求 → 下载 HTML → 发回 渲染进程
- 渲染进程(Blink):
- 解析 HTML → DOM
- 解析 CSS → CSSOM
- 遇到
<script>→ V8 执行 JS(主线程) - 遇到
fetch/setTimeout→ 交给浏览器 Web API 线程(网络/定时器线程) - 异步完成 → 回调进 任务队列(浏览器维护)
- 事件循环(浏览器):
- 调用栈空 → 先清空 微任务 → 再执行一个 宏任务
- Blink:生成渲染树 → Layout → Paint → 图层交给 合成线程
- 合成线程 → 发给 GPU 进程 → 合成显示到屏幕
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
