事件循环

寻技术 JS脚本 / JAVA编程 2024年01月03日 180

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

浏览器的进程模型

进程

程序运行需要其专属的内存空间,用于存储变量、执行函数等操作,可以将这块内存空间简单地理解为进程。

每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。

process_thread

线程

有了进程后,就可以运行程序的代码了,由线程运行代码。

一个进程至少有一个线程,在进程开启后会自动创建一个线程来执行代码,称为主线程

如果主线程结束了,那么进程就结束了。

如果程序需要同时执行多块代码,主线程就会启动更多的线程来执行代码,所以一个进程中可以包含多个线程。

浏览器的进程和线程

浏览器是一个多进程多线程的应用程序。

为了避免相互影响,为了减少连环崩溃的几率,当启动浏览器后,它会自动启动多个进程。

现代浏览器已经非常复杂了,复杂程度在向操作系统靠近。

image-20231012141200080

启动chrome浏览器,打开其任务管理器:

image-20231012141407647

可以发现尽管没有访问任何网页,也有一些进程是自动启动的

打开一个新的标签页,这里打开了百度,可以发现不同的标签页属于不同的进程

image-20231012142226444

其中,最主要的进程有:

  1. 浏览器进程

    浏览器进程是最先启动的进程,其它进程由它启动。

    主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。

    这里的界面显示不是指网页的内容渲染,而是指浏览器的界面,比如浏览器的头部:

    image-20231012142510968

    用户交互是指用户在浏览器上的点击、键盘、滚轮等操作,浏览器需要监听这些用户交互操作。

    子进程管理包含网络进程、渲染进程等等。

  2. 网络进程

    负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。

  3. 渲染进程

    渲染进程启动后,会开启一个渲染主线程,主线程负责执行HTML、CSS、JS代码。

    默认情况下,浏览器会为每个标签页开启一个新的渲染进程,以保证不同的标签页之间不相互影响。

    这种模式可能会在以后的版本被替换掉,因为每个标签页都开启一个新渲染进程会导致chrome成为“内存杀手”。——2023.10

    Chromium Docs - Process Model and Site Isolation (googlesource.com)

关闭

用微信“扫一扫”