浏览器的进程和线程(打开一个浏览器任务管理器多个进程多个)

图片授权基于 www.pixabay.com 相关协议

先简单解释一下什么是进程和线程?

启动一个程序的时候,操作系统会为它创建一块内存,用来存放数据、代码和主线程,当前环境叫「进程」。

线程呢,是在进程里面的,进程就像一个大通道,通道里面可以有多个线程。每个线程可以共享一个进程,一个线程出问题,那这个进程就崩溃了。

单进程时代

单进程时代的问题就是「崩溃」。

一个浏览器就只有一个进程的时代叫单进程时代。单进程不能碰到阻塞问题,要不然就会一直卡着,卡在页面没有动静。

如果网站写了错误代码,无限循环,那浏览器也会进入卡死状态或直接崩溃,这个崩溃是浏览器上的所有页面崩溃,因为他们都属于同一个进程嘛。

还有一方面就是「插件生态」,当时的插件引擎也是运行在同一进程里面的,插件出现问题,也会崩溃。

现在想想,那个时候的浏览器,还真的挺脆弱啊,动不动就崩溃。

不过,现在好了,Chrome 使用多个进程的方式来处理网络、插件、页面的运行,使用多个「渲染进程」处理页面的加载。

多进程时代

我们来看一下 Chrome 的进程实例:在 Chrome 浏览器右上角的「…」选择「更多工具」-「任务管理器」。

浏览器的进程和线程(打开一个浏览器任务管理器多个进程多个)

Chrome 进程示意图

可以看到我只打开了一个 页面,就是 「极客时间的 01 | Chrome 架构」页面。同时存在的进程有「浏览器主进程」「GPU进程」「Network 进程」「Audio 进程」「渲染进程(标签页)」

如果,再打开一个 Tab 页面,会增加一个渲染进程。如:我新打开了 Google 翻译页面,会增加一个新的进程。

浏览器的进程和线程(打开一个浏览器任务管理器多个进程多个)
新渲染进程示意图

在单进程时代,如果一个 Tab 崩溃了,整个浏览器也会崩溃,但现在不一样了,我把 Google翻译 页面故意关闭进程,会出现当前 Tab 页的崩溃,而不会影响其他的页面。

线程崩溃示意图

当进程崩溃,就会退出,然后操作系统会回收这个进程的资源。如果里面线程导致了内存泄露,也会被收掉。线程是在进程通道里面嘛,一收全收。

进程之间是不能随便通信的,如果进程之间需要进行数据的通信,这时候,就需要使用用于进程间通信(IPC)的机制了。

通过 IPC 机制来处理和协调各种进程之间的合作。主进程告诉网络进程可以访问服务器了,网络进程拿服务器资源,拿到数据告诉主进程,我拿到数据了,然后主进程再渲染页面。

主进程收到消息后,先会卸载当前的页面,回收内存,然后会更新浏览器的 Url、前进后退按钮、历史状态。


内容和图片来源于:极客时间《浏览器工作原理与实践》

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34546.html

(0)
小道研究's avatar小道研究
上一篇 2024年4月14日 下午12:12
下一篇 2024年4月14日 下午12:14

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注