进程可以描述为应用程序的执行程序。 线程是存在于进程内部并执行其进程程序的任何部分的线程。 启动应用程序时,将创建一个过程。 该程序可能会创建线程来帮助其正常运行,但这是可选的。
一个进程可以要求操作系统启动另一个进程来运行不同的任务。 发生这种情况时,将为新进程分配内存的不同部分。 如果两个进程需要通话,则可以使用进程间通信(IPC)进行通话。 许多应用程序都设计为以这种方式工作,因此,如果工作进程无响应,则可以重新启动它,而无需停止正在运行应用程序不同部分的其他进程。
哪个过程控制什么?
浏览器:-控制应用程序,包括地址栏,书签,后退和前进按钮。 还处理Web浏览器的隐形,特权部分,例如网络请求和文件访问。
渲染器:-控制显示网站的选项卡内的所有内容。
插件:-控制网站使用的所有插件,例如Flash。
GPU:-与其他进程隔离地处理GPU任务。 它被分为不同的过程,因为GPU处理来自多个应用程序的请求并将它们绘制在同一表面上。
> Different processes pointing to different parts of browser UI
谷歌浏览器如何使用进程和线程
Chrome具有多进程体系结构,并且每个进程都是高度多线程的。 主要目标是使主线程(浏览器进程中的" UI"线程)和IO线程(用于处理IPC的每个进程的线程)保持响应。 这意味着将任何阻塞的I / O或其他昂贵的操作卸载到其他线程。
线程数
每个镀铬工艺都有
主线程
· 在浏览器进程(BrowserThread :: UI)中:更新UI
· 在渲染器进程(Blink主线程)中:运行大多数Blink
IO线程
· 在浏览器进程中(BrowserThread :: IO):处理IPC和网络请求
· 在渲染器进程中:处理IPC。
一些其他专用线程。
和一个通用线程池。
Firefox如何使用进程和线程
多年前,Mozilla对Firefox开发的未来做出了一个重大决定,这使得将多处理集成到现有浏览器中变得更加困难。 大约前,与Internet Explorer相比,Firefox脱颖而出的主要方式是通过对附加组件和扩展的支持。 但是,使浏览器流行的附加功能也使得添加多处理器支持变得困难。 因此,Mozilla致力于从其旧的附加组件模型过渡到对多浏览器Web扩展的支持,同时启动Electrolysis项目以创建可以支持多处理体系结构的新浏览器版本。
比较Chrome和Firefox
Chrome和Firefox现在都支持多线程,但是它们以不同的方式实现。 在Chrome浏览器中,您打开的每个标签都会有自己的内容处理过程。 十个标签,十个过程。 一百个标签,一百个过程。 这种方法可最大程度地提高性能,但您会在内存消耗和电池寿命方面付出巨额代价。 Firefox并没有采用这种方法来解决问题,而是默认情况下最多旋转四个内容处理线程。 在Firefox中,前4个标签分别使用这4个进程,其他标签则使用这些进程中的线程进行调整。 一个进程中的多个选项卡共享内存中已经存在的浏览器引擎,而不是每个选项卡都创建自己的浏览器。
> Chrome uses a separate content process and engine for each website instance, but Firefox reuses pr
Mozilla声称Firefox也比其他竞争性浏览器使用更少的内存,Chrome在64位模式下使用的内存比Firefox多1.77倍,在32位模式下使用的内存比Firefox多2.44倍。
> Firefox uses less memory than other browsers
为什么无法启动时Chrome变得过热
虽然Firefox和Chrome现在都使用多个进程运行,但Firefox的某些功能有所不同,以避免耗尽计算机的有限内存。
默认情况下,Chrome为您访问的网站的每个实例创建一个单独的内容进程。 在Chrome中使用10个网站打开10个不同的标签,您将有10个不同的过程。 这些进程中的每个进程都有自己的内存-具有浏览器引擎的实例。 Chrome中的一个打开的标签页通常会占用数百兆的RAM。 Chrome的开放式创建进程的方法可能会导致很高的内存使用率。
另一方面,Firefox使用更保守的方法来使用进程通常会导致Firefox使用的内存少于Chrome。 默认情况下,Firefox现在最多可以为网页内容创建4个单独的进程。 因此,您的前4个标签分别使用这4个进程,而其他标签则使用这些进程中的线程运行。 一个进程中的多个选项卡共享内存中已经存在的浏览器引擎,而不是每个选项卡都创建自己的浏览器。
(本文翻译自Jeewantha Lahiru的文章《How web browsers use Processes and Threads》,参考:/@jeewanthalahiru/how-web-browsers-use-processes-and-threads-9f8f8fa23371)