线程
进程
进程的定义, 进程是一个具有一定独立功能的程序, 在一个数据集合上一次动态执行的过程. 进程是一个正在执行的程序的实例, 包括程序计数器, 寄存器和程序变量的当前值
进程有那些特征?
- 进程依赖于程序运行而存在, 进程是动态的, 程序是静态的
- 进程是操作系统进行资源分配和调度的一个独立单位 (CPU除外, 线程是处理器任务调度和执行的基本单位)
- 每个进程拥有独立的地址空间, 地址空间包括代码区, 数据区和堆栈区, 进程之间的地址空间是隔离的, 互不影响的.
什么是线程?
进程的创建, 销毁与切换存在着较大的开销, 我们需要有一个轻型的进程技术来减少开销.
线程被设计成进程的一个执行路径, 同一个进程中的线程共享进程的资源,
进程和线程的区别:
- 本质区别: 进程是操作系统资源分配的基本单位, 而线程是处理器任务调度和执行的基本单位
- 包含关系: 一个进程至少有一个线程, 线程是进程的一部分,所以线程也被轻权进程或者轻量级进程
- 资源开销: 每个进程都有独立的地址空间, 进程之间的切换会有较大的开销; 线程可以看作轻量级的进程, 同一个进程的线程共享进程的地址空间, 每个线程都有自己独立的运行栈和程序计数器, 线程之间切换的开销小
- 影响关系: 一个进程崩溃后, 在保护模式下其他进程不会被影响, 但是一个线程崩溃可能导致整个进程被操作系统杀死. 所以多进程要比多线程健壮
在计算机这个大工厂里面. 进程被比作一个车间, 为生产活动提供了设计图, 场地等生产要素, 而线程是这个车间中的一条条生产线. 生产线本身会有一个操作台, 具体的零件在这个被生产. 生产线必须由工人操作才能动起来. 当工人来到一个生产线旁并启动它之前. 必须查阅生产线的生产记录一边弄清楚这个生产线的零件加工到那种程度了, 然后才能转却地连续生产, 当工人停止生产线钱也必须记录这次的生产进度,以备下次读取, 这些进度信息可以理解为上下文. 读取和记录生产进度的过程称为上下文切换
一个工人可以在多条生产线见穿梭操作, 就像CPU在不同线程见切换一样, 这个动作被称为并发, 与之对应的, 多个工人操作多条生产线同时生产, 称为并行. 如果生产线不需要太多原料就能生产, 那这种生产认为被称为CPU密集型, 如果生产线大部分时间在等待原料的输入, 那这种任务被称为IO密集型.
并行与并发
一个基本的事实前提: 一个CPU在一个瞬间只能处理一个任务.
在日常生活中, 通常可以一边浏览网页, 一边听音乐这属于是两个进程同时进行, 但是我们CPU一次只能处理一个任务, 这是为什么呢?
这是因为时间片轮转调度. 每个进程会被操作系统分配一个时间片, 即每次被CPU选中来执行当前进程所用的时间. 时间一到, 无论进程是否运行结束, 操作系统都会强制将CPU这个资源转到另一个进程去执行.
并行是多个人在一个时间段里面走路, 路是不同的, 并发是一个人在一个时间段里面走路, 任务不同路也不同
线程私有资源
函数运行时的信息保存在栈帧中.