什方电气 发表于 2023-10-14 18:18:04

事件循环

事件循环与浏览器有关,需要先了解其进程模型。
浏览器的进程模型

进程

程序运行需要其专属的内存空间,用于存储变量、执行函数等操作,可以将这块内存空间简单地理解为进程。
每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。

线程

有了进程后,就可以运行程序的代码了,由线程运行代码。
一个进程至少有一个线程,在进程开启后会自动创建一个线程来执行代码,称为主线程。
如果主线程结束了,那么进程就结束了。
如果程序需要同时执行多块代码,主线程就会启动更多的线程来执行代码,所以一个进程中可以包含多个线程。
浏览器的进程和线程

浏览器是一个多进程多线程的应用程序。
为了避免相互影响,为了减少连环崩溃的几率,当启动浏览器后,它会自动启动多个进程。
现代浏览器已经非常复杂了,复杂程度在向操作系统靠近。

启动chrome浏览器,打开其任务管理器:
可以发现尽管没有访问任何网页,也有一些进程是自动启动的。
打开一个新的标签页,这里打开了百度,可以发现不同的标签页属于不同的进程。
其中,最主要的进程有:
<ol>浏览器进程
浏览器进程是最先启动的进程,其它进程由它启动。
主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。
这里的界面显示不是指网页的内容渲染,而是指浏览器的界面,比如浏览器的头部:
用户交互是指用户在浏览器上的点击、键盘、滚轮等操作,浏览器需要监听这些用户交互操作。
子进程管理包含网络进程、渲染进程等等。
网络进程
负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。
渲染进程
渲染进程启动后,会开启一个渲染主线程,主线程负责执行HTML、CSS、JS代码。
默认情况下,浏览器会为每个标签页开启一个新的渲染进程,以保证不同的标签页之间不相互影响。
<blockquote>这种模式可能会在以后的版本被替换掉,因为每个标签页都开启一个新渲染进程会导致chrome成为“内存杀手”。——2023.10
Chromium Docs - Process Model and Site Isolation (googlesource.com)


来源:https://www.cnblogs.com/feixianxing/p/frontend-message-loop-process-thread-in-browser.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 事件循环