【问题标题】:Does chrome really create a process for each tab?chrome真的会为每个标签创建一个进程吗?
【发布时间】:2016-10-04 13:01:57
【问题描述】:
- 操作系统概念第 9 版,第 123 页,“多进程
架构 - Chrome 浏览器"
- 在这部分,作者说每个tab代表一个单独的
进程,但是当我查看任务管理器(Windows)时,只有一个
“谷歌浏览器”下的进程,例如现在是 Stack Overflow,
我还在打开其他标签,为什么我在任务管理器中找不到?
- 还有一些其他的“过程”,但我认为这是“无事可做”
使用这些选项卡,因为当只有一个选项卡时,它们仍然
这里。那么如何理解书中的内容呢?
【问题讨论】:
标签:
google-chrome
operating-system
taskmanager
【解决方案1】:
Chromium 支持四种不同的模型,这些模型会影响浏览器如何将页面分配给渲染器进程。 默认情况下,Chromium (Chrome) 为用户访问的每个网站实例使用单独的操作系统进程。 但是,用户可以在启动 Chromium 时指定命令行开关以选择其他架构之一:一个进程用于一个网站的所有实例,一个进程用于每组连接的选项卡,或者一个进程中的所有内容。
就我而言,我有以下情况:
Mac 操作系统:
窗户:
如您所见,每个任务都有自己的 PID(进程 ID)
详情:
也可以参考Chrome is using 1 process per website instead of per tab、Chrome tabs and processes问题。
这里是official documentation关于 Chrome / Chromium 的流程模型。
每个站点的进程:
Chromium 还支持将不同站点彼此隔离的流程模型,但会将同一站点的所有实例分组到同一流程中。要使用此模型,用户应在启动 Chromium 时指定 --process-per-site 命令行开关。这会创建更少的渲染器进程,用一些鲁棒性换取更低的内存开销。此模型基于内容的来源,而不是选项卡之间的关系。
每个标签的进程:
每个站点实例进程和每个站点进程模型在创建渲染器进程时都会考虑内容的来源。 Chromium 还支持一个更简单的模型,该模型将一个渲染器进程专用于每组脚本连接的选项卡。可以使用 --process-per-tab 命令行开关选择此模型。
【解决方案2】:
是的,它显示当前打开的标签 MainTitle。
要知道的简单控制台程序。
Process[] localByName = Process.GetProcessesByName("Chrome");
foreach (Process p in localByName)
{
Console.WriteLine(string.Format("Process: {0}\n Title:{1} \n P\n", p.ProcessName, p.MainWindowTitle));
}