事件循环与浏览器有关,需要先了解其进程模型。
浏览器的进程模型
进程
程序运行需要其专属的内存空间,用于存储变量、执行函数等操作,可以将这块内存空间简单地理解为进程。
每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。
线程
有了进程后,就可以运行程序的代码了,由线程运行代码。
一个进程至少有一个线程,在进程开启后会自动创建一个线程来执行代码,称为主线程。
如果主线程结束了,那么进程就结束了。
如果程序需要同时执行多块代码,主线程就会启动更多的线程来执行代码,所以一个进程中可以包含多个线程。
浏览器的进程和线程
浏览器是一个多进程多线程的应用程序。
为了避免相互影响,为了减少连环崩溃的几率,当启动浏览器后,它会自动启动多个进程。
现代浏览器已经非常复杂了,复杂程度在向操作系统靠近。
启动chrome浏览器,打开其任务管理器:
![image-20231012141407647](https://fox-blog-image-1312870245.cos.ap-guangzhou.myqcloud.com/202310121414940.png)
可以发现尽管没有访问任何网页,也有一些进程是自动启动的。
![](https://fox-blog-image-1312870245.cos.ap-guangzhou.myqcloud.com/202310121414655.png)
打开一个新的标签页,这里打开了百度,可以发现不同的标签页属于不同的进程。
![image-20231012142226444](https://fox-blog-image-1312870245.cos.ap-guangzhou.myqcloud.com/202310121422739.png)
其中,最主要的进程有:
-
浏览器进程
浏览器进程是最先启动的进程,其它进程由它启动。
主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。
这里的界面显示不是指网页的内容渲染,而是指浏览器的界面,比如浏览器的头部:
用户交互是指用户在浏览器上的点击、键盘、滚轮等操作,浏览器需要监听这些用户交互操作。
子进程管理包含网络进程、渲染进程等等。
-
网络进程
负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。
-
渲染进程
渲染进程启动后,会开启一个渲染主线程,主线程负责执行HTML、CSS、JS代码。
默认情况下,浏览器会为每个标签页开启一个新的渲染进程,以保证不同的标签页之间不相互影响。
这种模式可能会在以后的版本被替换掉,因为每个标签页都开启一个新渲染进程会导致chrome成为“内存杀手”。——2023.10
Chromium Docs - Process Model and Site Isolation (googlesource.com)
标签:浏览器,渲染,队列,主线,任务,循环,线程,事件 From: https://www.cnblogs.com/feixianxing/p/frontend-message-loop-process-thread-in-browser.html