进程与线程架构
浏览器的进程与线程架构
CPU,GPU,进程与线程
CPU 是计算机里面的一块芯片,上面有一个或者多个核心(core)。我们可以把 CPU 的一个核心(core)比喻成一个办公室工人,他功能强大,上知天文下知地理,琴棋书画无所不能,它可以串行地一件接着一件处理交给它的任务。很久之前的时候大多数 CPU 只有一个核心,不过在现在的硬件设备上 CPU 通常会有多个核心,因为多核心 CPU 可以大大提高手机和电脑的运算能力。
图形处理器或者说 GPU(Graphics Processing Unit)是计算机的另外一个重要组成部分。和功能强大的 CPU 核心不一样的是,单个 GPU 核心只能处理一些简单的任务,不过它胜在数量多,单片 GPU 上会有很多很多的核心可以同时工作,也就是说它的并行计算能力是非常强的。图形处理器(GPU)顾名思义一开始就是专门用来处理图形的,所以在说到图形使用 GPU(using)或者 GPU 支持(backed)时,人们就会联想到图形快速渲染或者流畅的用户体验相关的概念。最近几年来,随着 GPU 加速概念的流行,在 GPU 上单独进行的计算也变得越来越多了。
当你在手机或者电脑上打开某个应用程序的时候,背后其实是 CPU 和 GPU 支撑着这个应用程序的运行。通常来说,你的应用要通过操作系统提供的一些机制才能跑在 CPU 和 GPU 上面。
就像我们在 《Linux-Notes》中介绍的进程与线程之间的关系,进程(process)是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,线程(thread)是 CPU 调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。浏览器属于一个应用程序,而应用程序的一次执行,可以理解为计算机启动了一个进程,进程启动后,CPU 会给该进程分配相应的内存空间,当我们的进程得到了内存之后,就可以使用线程进行资源调度,进而完成我们应用程序的功能。
而在应用程序中,为了满足功能的需要,启动的进程会创建另外的新的进程来处理其他任务,这些创建出来的新的进程拥有全新的独立的内存空间,不能与原来的进程内向内存,如果这些进程之间需要通信,可以通过 IPC 机制(Inter Process Communication)来进行。
那么浏览器是怎么使用进程和线程来工作的呢?其实大概可以分为两种架构,一种是单进程架构,也就是只启动一个进程,这个进程里面有多个线程工作。第二种是多进程架构,浏览器会启动多个进程,每个进程里面有多个线程,不同进程通过 IPC 进行通信。
上面的图表架构其实包含了浏览器架构的具体实现了,在现实中其实并没有一个大家都遵循的浏览器实现标准,所以不同浏览器的实现方式可能会完全不一样。