在介绍进程和线程之前,我们需要先了解下什么是并行处理,如果我们理解了并行处理的概念,那么再理解进程与线程之间的的关系会变得轻松很多。
并行处理
计算机中的并行处理就是同一时刻处理多个任务,比如我们要计算下面三个表达式的值并显示出结果。
A = 1+2
B = 20/5
C = 7*8
在编写代码的时候,我们可以把这个过程拆分成四个任务:
- 任务一:计算A = 1+2
- 任务二:计算B = 20/5
- 任务三:计算C = 7*8
- 任务四:显示最后计算的结果
正常情况下程序可以使用单线程来处理,也就是分四步按照顺序分别执行这四个任务。
如果采用多线程,会怎么样呢?我们只需分”两步走“:第一步,使用三个线程同时执行前三个任务;第二步,再执行第四个显示任务。
通过对比分析,你会发现用单线程执行需要四步,而使用多线程只需要两步,因此,使用并行处理能大大提升性能。
线程VS进程
多线程可以并行处理任务,但是线程是不能单独存在的,需要进程来启动和管理,那么什么是进程呢?实际上一个进程就是一个程序的运行实例,具体就是启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的运行环境叫进程。
我们将前文并行处理中提到的计算过程用下图来对比:
从图中可以看出,线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。
总结来说,进程与线程之间的关系有以下四个特点:
1、进程中的任意一线程执行出错都会导致整个进程的崩溃。
我们可以模拟以下场景:
A = 1+2