当我看到Google Chrome浏览器的任务管理器时,我看到很少(每个)选项卡在单个进程下运行,而选项卡组在单个进程下运行。出于好奇,我进行了搜索,以了解为什么它作为多个进程而不是多个线程运行。而引起我注意的一件事是,当它作为单个进程运行并生成多个线程时,可能会出现一些限制/缺点,例如
1)可以创建的线程数限制
2)当单个选项卡不响应时,整个应用程序将变得无用,并且由于站点行为不当,我们必须退出chrome并重新启动它。
一些人提到Chrome在每个域中使用单个进程,但在这里似乎并非如此。
我还不清楚,
1)Chrome决定何时生成新进程?
2)在单独的过程中运行各个选项卡的另一个优点是什么?
3)当每个cookie在不同的进程中运行时,如何在它们之间共享cookie?这是通过进程间通信发生的吗?如果是,那会不会太贵?并会影响其他标签(即网页)的性能吗?
答案 0 :(得分:2)
问了这个问题之后,我来看了这篇文章(Multi Process Architecture of Chromium),它回答了我的问题(1)。
Chrome决定生成新进程时吗?
一旦Google Chrome创建了浏览器进程,通常它将为您访问的网站的每个实例创建一个渲染器进程。这种方法旨在使来自不同网站的页面彼此隔离。
您可以认为这是对浏览器中的每个选项卡使用不同的过程,但是如果两个选项卡彼此相关并显示相同的站点,则允许两个选项卡共享一个过程。例如,如果一个选项卡使用JavaScript打开了另一个选项卡,或者在新选项卡中打开了指向同一站点的链接,则这些选项卡将共享渲染器进程。这使这些选项卡中的页面可以通过JavaScript进行通信并共享缓存的对象。相反,如果您在选项卡的位置栏中键入其他站点的URL,则它们将在该选项卡的新渲染器过程中交换。
它们限制了它们创建的渲染器进程的数量(大多数情况下为20)。一旦达到此限制,他们将开始将现有渲染器过程重新用于新标签页。
在不同的过程中运行选项卡有什么好处?
Google Chrome浏览器利用这些属性,将Web应用程序和插件与浏览器本身置于不同的进程中。这意味着一个Web应用程序中的渲染引擎崩溃不会影响浏览器或其他Web应用程序。这意味着操作系统可以并行运行Web应用程序以提高其响应速度,并且这意味着如果特定的Web应用程序或插件停止响应,浏览器本身将不会锁定。这也意味着他们可以在限制性沙箱中运行渲染引擎进程,从而有助于在发生漏洞利用时限制损害。
有趣的是,使用多个进程意味着Google Chrome可以拥有自己的任务管理器(如下所示),您可以通过右键单击浏览器的标题栏来访问它。通过此任务管理器,您可以跟踪每个Web应用程序和插件的资源使用情况,而不是整个浏览器的资源使用情况。它还使您可以杀死任何已停止响应的Web应用程序或插件,而不必重新启动整个浏览器。