一个好汉三个帮?一文搞懂浏览器进程线程。

175 阅读5分钟

浏览器,启动!

等等,启动之前先了解一下什么是进程和线程

内存空间

程序的运行需要内存空间,这里的内存空间并不是你电脑的物理内存,而指的是你电脑的运行内存。每启动一个程序时,系统会帮你开辟一块内存空间来给你运行你的进程。而内存空间的大小或者说运行内存的大小就决定了你运行程序的流畅度,这就是为什么现在的手机运行内存都卷到24GB了。

img-PQe8jsKSGCkszi0VlZS9OCbi.png

进程和线程

进程(Process)

进程是一个正在执行的程序的实例,包含程序代码、当前活动的状态、所需的资源(如内存、文件句柄等)以及进程的执行上下文(如程序计数器、堆栈等)。换句话说,你可以把系统帮你开辟的这块内存空间简单的理解为进程。

线程(Process)

线程是进程的一个执行单元,是 CPU 调度的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源。换句话说,你可以理解为进程把分配给他的内存空间进行了再分配,分配给了线程

img-tBhPoNLdGT4avmEM5gWPSN0v.png

这回,浏览器启动!

分配内存空间,启动进程

正如上面所说,运行浏览器同时也会分配一片内存空间。在拿到内存空间之后也是成功的运行起了浏览器进程。俗话说的好,一个好汉三个帮!现代浏览器为了避免浏览器连环崩溃的情况,将浏览器的功能分到了几个进程中实现。 在浏览器进程启动后,浏览器进程会启动几个进程与他一起完成浏览器”大业“。 image.png 这点在系统的任务管理器中可以看到,甚至现代浏览器已经复杂到一定程度甚至你可以在浏览器中的任务管理器中看到。

image.png

浏览器的进程

可以结合浏览器的任务管理器分析出,浏览器主要分为几个进程:

1. 浏览器进程

注意,这并不是打错了。浏览器进程可以理解为浏览器的主进程。我们双击浏览器图标启动的其实是浏览器主进程,剩下的进程由浏览器进程启动。浏览器进程负责地址栏、回退、刷新以及收藏夹栏等区域管理。

2. GPU进程

GPU进程是负责利用计算机的图形处理单元来加速图形渲染任务,处理复杂的图形计算任务。例如WebGL视频解码等场景,它就是主力啦!

3. 网络进程

网络进程主要负责发送和接收网络请求,HTTP/HTTPS 请求处理网页和资源的加载请求,向服务器发送请求并接收响应。

4. 第三方插件进程

插件也是有排面了,单独有一个进程来启动它们哈哈哈。

5. 渲染主进程

这个就是重量级了,它主要负责html、css、JavaScript的加载解析。什么?你说这不就是网页的主要组成部分吗?没错,页面的渲染就靠它了。它可是我们的“劳模”。其实这里的渲染主进程也就是我们熟知的浏览器内核。 默认我们的浏览器每有一个tab页,就会启动一个渲染主线程,这是为了让每一个网页之间相互独立,不会一崩百崩。这就是我们接下来研究的重点。
image.png

以上是浏览器的主要进程,随着不同的浏览器的强大,或者不同的厂牌有不同的背景。有着不同的内部进程,但是原理都是大同小异。

渲染主进程中,有着一些“劳模”线程,这里着重介绍几个线程。

(1)GUI线程

注意看,这里的不是GPU,也不是CPU,更不是UFO。GUI线程的主要工作就是解析html文件,生成足以支持渲染的结构树。

(2)JavaScript引擎线程

这个线程就是我们说的浏览器引擎,你可能听说过chrome中的v8引擎,这里的v8就是JavaScript引擎。v8引擎会营造一个沙盒环境,你可以理解它是一个类似虚拟机的原理,功能是解析处理JavaScript代码。这里需要注意的是,它和GUI线程不能同时运行

(3)定时触发器线程

定时触发器线程主要负责处理定时器事件。将定时器的回调事件包装后推入事件队列。

(4)事件触发线程

事件触发线程在浏览器渲染主进程中起着关键作用,负责处理用户输入事件、异步任务事件。通过事件队列和任务调度机制,事件触发线程能够确保浏览器的响应性和流畅性,并协调与渲染和网络等其他线程的工作。这样,用户的交互体验得以顺畅,浏览器能够高效地处理各种任务。

(5)异步 http 请求线程

在浏览器的渲染主进程中,异步 HTTP 请求的处理涉及多个环节,包括请求的发起、网络层的处理、事件回调的执行以及 DOM 的更新。虽然浏览器可能没有单独的“异步 HTTP 请求线程”,但它通过事件循环和任务队列机制高效地管理异步请求,确保用户与页面的交互流畅且响应迅速。通过这种方式,浏览器能够有效地处理网络请求,同时保持良好的用户体验。

总结

浏览器的启动是由浏览器进程启动若干进程,其中渲染主进程是比较重要的一个线程。渲染组进程会启动GUI线程来解析html文件、JavaScript引擎进程来运行JavaScript文件。

我在下一篇文章中带你认识这个“大忙人”渲染主进程的工作模式,也就是浏览器的渲染模式。本文中提到的事件队列也会在后续的文章中加以讲解。感谢你读到这里,如果你喜欢这篇文章请点赞收藏,这真的对我很重要!