浏览器多进程架构
一句话结论:浏览器用“多进程 + 多线程”把渲染、网络、GPU 等隔离开;事件循环主要发生在渲染进程的主线程上。
1. 常见进程(以 Chromium 为例)
- Browser 进程:UI、导航、权限、进程管理的“总控”
- Renderer 进程:页面渲染与 JS 执行(通常一个标签页/站点实例对应一个或多个渲染进程)
- Network 进程:网络请求、缓存、Cookie/连接复用等
- GPU 进程:合成与部分绘制相关工作,减轻主线程压力
- 其它:扩展/插件/工具进程等(隔离降低崩溃与安全影响面)
2. 渲染进程里的关键线程
- Main thread:执行 JS、样式计算、布局、触发绘制等;事件循环所在
- Compositor thread:合成层、滚动与合成动画(尽量不阻塞主线程)
- Worker threads:Web Worker 等,把计算挪出主线程(但 DOM 仍只能在主线程改)
3. 为什么这会影响“事件循环”
- JS 单线程:主线程一旦被长任务占满,输入/定时器回调/渲染都会延后
- “并发/时间切片”的底层动机:把主线程时间让出来,保证交互与刷新