js线程和 渲染线程是互斥的!!!!
进程&线程
进程 当启动一个应用的时候,计算机会开启一个进程,会分配给一定的内存,在内存中开发你的应用,我们将它称为‘工厂’,两个进程使用IPC(inter Process Communication)通信
线程 每个线程就像工厂里的员工,可以做自己的事,也可以相互配合,由工厂调配
浏览器主进程
管理子进程,提供服务功能
渲染进程
将html、css、js渲染成界面、js引擎v8和排版引擎Blink在上面,为每个tab创建渲染进程(大多数时候是一个渲染进程,但也有多个的情况,与window.opener属性以及浏览器安全策略——站点隔离相关,参见:https://blog.csdn.net/wangfeijiu/article/details/106609953)
gpu进程
负责3d css效果,和ui界面绘制、
网络进程
负责网络请求,网络资源加载
插件进程
负责插件运行(由于插件很容易崩溃,所以放在单独的进程里,不容易影响别人)
各进程的线程
主进程包含的线程
- 浏览器进程主线程(Browser Process Main Thread):负责协调和管理其他进程的工作,包括用户界面、网络请求、扩展管理、安全管理等方面。这个线程通常是单独的线程,以保证浏览器的稳定性和响应性。
- UI 线程(User Interface Thread):负责渲染浏览器的用户界面,包括地址栏、菜单栏、工具栏等。这个线程通常是单独的线程,以保证用户界面的响应性和流畅性。
- I/O 线程(I/O Thread):负责处理网络请求、文件读写等 I/O 操作。这个线程通常是多个线程,以提高 I/O 操作的并发能力和响应速度。
- 文件线程(File Thread):负责处理文件读写和管理,包括文件系统访问、文件读写、文件传输等。这个线程通常是多个线程,以提高文件操作的并发能力和响应速度。
渲染进程包含的线程
- 主线程(Main Thread):也称为渲染线程(Renderer Thread),负责解析 HTML、CSS 和 JavaScript 代码,构建 DOM 树、样式计算、布局和绘制等。同时还处理用户输入、网络请求、JavaScript 脚本执行等任务。
- 合成线程(Compositor Thread):负责将已经渲染好的图层合成成最终的视图,并将其显示在屏幕上。此外,合成线程还会处理一些动画效果和页面过渡效果等。
- JavaScript 引擎线程(JavaScript Engine Thread):负责解释和执行 JavaScript 代码。通常使用多个线程来加速执行效率。例如,Google Chrome 浏览器使用的 V8 引擎就采用了多线程的设计,将 JavaScript 代码解释和编译成机器码的过程分别交给解释器线程和编译器线程处理。
gpu进程的线程
- GPU 进程主线程(GPU Process Main Thread):也称为呈现线程(Presentation Thread),负责将来自浏览器进程和渲染进程的图形命令进行排序、解析和执行,以生成最终的图像。这个线程通常是单独的线程,以提高图形渲染的效率。
- 光栅化线程(Raster Thread):负责将矢量图形转换成位图形式,以便在屏幕上显示。这个线程通常是多个线程,以提高光栅化的速度。
- 合成线程(Compositor Thread):也称为提交线程(Submission Thread),负责将来自渲染进程的图层转换成纹理,并进行纹理合成和显示。这个线程通常是单独的线程,以提高图层合成和显示的效率。
网络进程包含的线程
- 网络线程(Network Thread):负责处理网络请求和响应,包括 DNS 解析、建立连接、发送和接收数据等。这个线程通常是单独的线程,以提高网络请求的并发能力和响应速度。
- URL 请求线程(URL Request Thread):负责处理网络请求的 URL,将其解析成主机名、端口号、路径和查询参数等信息,并传递给网络线程。
- 证书验证线程(SSL Certificate Verification Thread):负责对 HTTPS 网络请求的证书进行验证,确保请求的安全性和合法性。
- 网络数据缓存线程(Network Data Cache Thread):负责处理网络数据缓存,将常用的网络资源存储在本地缓存中,提高页面加载速度。