UC浏览器搜索引擎 2019-09-29
在正式开始讲进程和线程之前首先需要理解的一个概念就是并行处理,因为当你理解了并行处理之后,你对进程和线程的理解就会轻松很多。
从字面意思就可以理解,并行处理的意思就是,同一时刻处理多个任务。比如我们要计算下面两个表达式的值:
A = 1 + 2 B = 2 + 3
从代码编译的角度这个过程可以被拆分为三部分:
如果我们使用单线程来处理,浏览器就会按照我上面的步骤分3步来执行。
如果采用多线程最后的结果会是怎样的呢?
多线程只需要分两步来进行处理:
首先需要明确的一个概念是,线程是不可以单独存在的,线程是依赖于进程而存在的而。
那什么是进程呢?
一个进程就是一个程序的运行实例。
官方的解释是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样一个运行环境叫做进程。
进程中的任何一个线程执行出错,都会导致整个进程奔溃
举一个例子:
A = 1 * 0 B = 2 / 0
当上面的程序在计算 B 的时候,由于分母为 0 ,会导致执行出错,因为线程执行出错会导致整个进程的崩溃,进程一旦崩溃,其他线程的执行也就没有结果了。
线程之间可以对进程中的公共数据进行操作。
当一个进程退出时,操作系统会回收该进程所占用的所有资源;即使其中任意线程因操作不当导致内存泄漏,所占用的内存也会被正确回收。
进程隔离是为了保护操作系统中各自的进程互不干扰,每一个进程只能访问自己所占有的数据,这样就避免了进程A写入数据到进程B的情况出现。
同时,也正因为进程之间的数据是相互隔离的,所以当一个进程崩溃了或者是挂起了,是不会影响到其他的进程的。
但是进程之间也不是绝对的隔离,如果进程之间需要数据的通信,这个时候,就需要使用进程间通信(IPC) 的机制了。
最新的 Chrome 浏览器包括:1个浏览器主进程、1个GPU进程、1个网络进程、多个渲染进程和多个插件进程。
下面我们来说说这几个进程的主要功能:
虽然多进程模型提高了浏览器的稳定性、流畅性和安全性,但同样布不可避免的带来了一些问题:
为了解决目前的浏览器架构所带来的问题,在2016年,Chrome 官方团队使用”面向服务的架构“的思想设计了新的 Chrome 架构。
也就是说 Chrome 整体架构会朝向现代操作系统所采用的”面向服务的架构“方向发展,原来的各种模块会被重构成独立的服务,每个服务都可以在独立的进程中运行,访问服务必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚、松耦合、易于维护和扩展的系统,更好的实现 Chrome 简单、稳定、高速、安全的目标。