浏览器的进程和线程

什么是并行处理

在了解进程和线程之前,先来看一下什么是并行处理;

计算机中的并行处理就是同一时刻处理多个任务,比如我们要计算下面这两个表达式的值,并显示出结果

1
2
A = 1+2
B = 2+3

在编写代码的时候,我们可以把这个过程拆分为三个任务:

  • 任务 1 是计算 A=1+2;
  • 任务 2 是计算 B=2+3;
  • 任务 3 是显示最后计算的结果;

正常情况下,可以使用单线程来处理,也就是说分三步按照顺序分别执行;

如果采用多线程,会怎么样呢?我们只需分“两步走”:

  • 第一步,使用两个个线程同时执行前两个任务;
  • 第二步,再执行第四个显示任务。

通过对比分析,你会发现用单线程执行需要四步,而使用多线程只需要两步。因此,使用并行处理能大大提升性能

进程 vs 线程

多线程可以并行处理任务,但是线程是不能单独存在的,它是由进程来启动和管理的

在很多地方我们都有看到一句话: 进程是CPU分配资源的最小单位,线程是CPU调度的最小单位。

那么如何理解这句话,如果把进程比作一个工厂,那么线程就像工厂中的员工,工厂与工厂之间相互独立,工厂中的员工相互协作完成任务,每个工厂至少都有一个员工,员工之间共享工厂的仓库。

Image.png

进程和线程有以下四种关系

1. 进程中的任意一线程执行出错,都会导致整个进程的崩溃。

所以js(线程)执行报错时导致整个渲染进程停止工作,比如一个工人(线程)在流水线生产产品时由于操作失误,导致机器故障,那就会导致工厂(进程)停产。

也可以模拟以下场景:

1
2
A = 1+2
B = 20/0

当线程执行到 B = 20/0 时,由于分母为 0,线程会执行出错,这样就会导致整个进程的崩溃,当然另外线程执行的结果也没有了

2. 线程之间共享进程中的数据。

如上图所示,工人之间是共享工厂的仓库的,线程之间可以对进程的公共数据进行读写操作。

3. 当一个进程关闭之后,操作系统会回收进程所占用的内存。

当一个进程退出时,操作系统会回收该进程所申请的所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收。

如果工厂关闭,工厂内的所有资源都会被回收。

4. 进程之间的内容相互隔离。

进程隔离是为保护操作系统中进程互不干扰的技术,每一个进程只能访问自己占有的数据,也就避免出现进程 A 写入数据到进程 B 的情况。如果进程之间需要通信,就需要用到进程之间相互通信的机制了。

比如Electron桌面应用中内部得也是chromium的内核,有两个进程,分别是Main主进程和Renderer渲染进程,两者的通信也是需要用到IPC (inter-process communication)

工厂与工厂之间相互独立,资源不共享。

Kommentare

:D 一言句子获取中...