文章目录
一、进程与线程的关系与区别
1、线程描述
线程是进程中执行运算的最小单元,是操作系统执行处理机制的基本单位。
每个进程至少有一个线程,线程可以利用进程所拥有的资源执行调度和运算。
2、进程与线程的关系
图示1:
图示2:
图示3:
3、进程与线程的区别
3.1、进程回顾
- 进程依赖于程序运行而存在,进程是动态的,程序是静态的;
- 进程是最小的分配资源单位
- 每个进程都有独立的地址空间,进程之间互不影响。
3.2、区别总结
- 本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
- 包含关系:一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
- 资源开销:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
- 影响关系:一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。
- 线程是一个上下文的执行指令,而进程则是与运算相关的一簇资源。
一个线程可以操作同一进程的其他线程,但是进程只能操作其子进程。
4、线程资源的共享与私有
4.1、共享资源
1.可执行的指令
2.静态数据****
3.进程中打开的文件描述符
4.当前工作目录
5.用户ID
5.用户组ID
4.2、私有资源
1.每个进程的ID(tid)
2.PC(程序计数器)和其他寄存器
3.堆、栈
4.错误号
5.优先级
6.执行状态和属性
二、并发机制
1、首先理解并行
一个基本的事实前提:一个CPU在一个瞬间只能处理一个任务。
在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;
在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。
因此,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
2、并发详解
并发:是指一个时间段中有几个程序都处于已启动运行到运行完毕之间
- 并发就是只有一个CPU资源,程序(或线程)之间要竞争得到执行机会。
- 图中的第一个阶段,在A执行的过程中B,C不会执行,这段时间内这个CPU资源被A竞争到了
同理,第二个阶段只有B在执行,第三个阶段只有C在执行。 - 其实,并发过程中,A,B,C并不是同时在进行的(微观角度)。但又是同时进行的(宏观角度)。
3、线程的两种并发关系:同步和互斥。
3.1、临界资源与临界区
临界资源:一次只允许一个任务(进程或线程)访问的共享资源
临界区:访问临界资源的代码
3.2、互斥
mutex互斥锁:防止线程并发访问临界资源,导致错乱,实现同一时间,只有一个线程访问临界资源。
3.3、同步
信号量
条件变量
实现:线程按照一定的顺序,先后对临界资源进行访问。