目录
🐼今日良言:希望是生命的源泉,失去它生命就会枯萎。
🐯一、进程
🐕1.概念
🐕2.PCB
🐕3.进程调度
🐭二、线程
🐑1.概念
🐇三、进程和线程的联系和区别
🐝1.联系
🐝2.区别
🐼今日良言:希望是生命的源泉,失去它生命就会枯萎。
🐯一、进程
🐕1.概念
首先,先来认识一下,什么是进程(process)
进程(process)又叫任务(task),打开任务管理器来观察一下当前正在运行的进程
可以观察到,当前有很多进程正在运行.
需要注意的是:一个程序运行起来才是进程,不运行不叫进程,只是一个程序.
观察上面任务处理器,可以看到,每个进程都对应一些资源
结合上述情况,可以说:进程是操作系统资源分配的基本单位.
进程是一个重要的'软件资源',是由操作系统内核负责管理的.
操作系统内核管理进程主要是通过:描述+组织
描述:操作系统使用结构体来描述进程的属性,用来描述进程的这个结构体叫做PCB(进程控制块)
组织:操作系统通过双向链表,来把多个PCB给串到一起(这里的双向链表并不是一个简单的双向链表)
创建一个进程,本质上就是创建一个PCB节点(结构体),然后插入到链表中
销毁一个进程,本质上就是从链表中删除一个PCB节点
上面任务管理器中看到的进程列表,本质上就是遍历这个链表
🐕2.PCB
接下来,介绍一下PCB中哪些描述进程的特征
1).pid
进程的身份标识符(每个进程对应一个pid,唯一的数字)
将人比作进程,那么pid就是这个人的身份证号
2).内存指针
内存指针指出了当前进程要用的内存是哪些
3).文件描述符表
硬盘上的文件等其他资源
2) 、3)描述了进程持有哪些资源
🐕3.进程调度
现在CPU一般都是多核CPU,在设备管理器中查看当前是几核CPU
如上图,是8核CPU,而进程有上百个,所以,该如何让这么多的进程'同时运行'呢?
这里的'同时运行'并非真正的同时运行,而是'分时复用'.这里引入两个概念:并行和并发
并行:微观上同一时刻,多个cpu上的进程,同时执行.
并发:微观上同一时刻,一个核心上只能运行一个进程,但是它能对进程进行快速切换.
快速切换指的是,在当前CPU上,先运行QQ,再运行QQ音乐,在运行微信,只要切换的速度足够快,宏观上让人感知不到
并行和并发都是由操作系统内核负责处理的,应用程序(程序猿)是感知不到的,所以说,在应用程序这个角度,是无法区分并行和并发,因此,往往也把并行和并发统称为并发,除非显式声明,否则,谈到的并发就是并行+并发.
为了给这些进程分配CPU资源,解决办法是:进程调度. 操作系统里面有一个重要的模块---调度器,就负责让有限的CPU来调度执行这么多的进程,如何实现这样的调度器就需要PCB的进一步支持.接下来介绍一下PCB中的其它一些属性,通过这些属性来完成进程调度.
进程调度的相关属性:
1).进程的状态
就绪状态:进程已经准备好到CPU上去执行.
运行状态:正在CPU上执行的进程.
阻塞状态:短时间无法到CPU上执行的进程.
以五人制足球比赛来举例,在五人制足球比赛中,是可以无限次换人的.
在场边穿好球鞋球衣等各种准备工作都做好的轮换球员,准备上场踢球,此时这个状态就是就绪状态.
而场上正在比赛的球员就是运行状态.
被替补球员换下场的球员需要休息调整,暂时无法上场比赛,此时就是阻塞状态.
2).优先级
进程是有优先级的,操作系统在进行调度的时候,会优先调度执行优先级高的进程
还是以一场足球比赛为例,水平越高的踢首发,次之的替补,而这里的水平就类似于优先级
3).上下文
操作系统在进行进程切换的时候,需要把进程执行的'中间状态'记录下来,保存好
等到下次这个进程再次在CPU上执行的时候,就可以恢复上次的状态继续往下执行.
这个操作类似于: 读档和存档 如下小游戏的读档和存档
上下文本质上就是存档的内容
进程的上下文,就是CPU各个寄存器的值
(寄存器是CPU内置的存储数据的模块,保存的就是程序运行过程中的中间结果)
保存上下文:就是把这些CPU寄存器的值,保存到内存中(PCB中)
恢复上下文:就是把内存中的这些寄存器的值恢复回去.
4).记账信息
根据字面理解:就是记录账本信息
记账信息是:操作系统需要统计每个进程在CPU上执行的时间和执行的指令条目,根据这个来决定下一阶段如何调度.
🐭二、线程
🐑1.概念
在介绍线程之前,补充一点小知识.
计算机引入'进程'最主要的目的是解决'并发编程'这样的问题.
这是因为CPU进入了多核心的时代,CPU已经做的很小了,再往小做就很困难了,要想进一步提高程序的执行速度,就需要充分的利用CPU的多核资源.
多进程编程,已经可以解决'并发编程'的问题了,已经可以利用CPU多核资源了.
但是由于进程消耗资源多而且速度慢,创建/销毁/调度一个进程的开销都比较大,所以说为了解决进程消耗资源多且速度慢这个问题,线程应用而生.
线程也叫做'轻量级'进程
在解决'并发编程'的前提下,让创建/销毁/调度 的速度更快一些.
线程为什么叫做'轻量级'进程呢?它轻在哪里?
这是因为,线程节省了申请资源/释放资源的操作.
🐇三、进程和线程的联系和区别
🐝1.联系
1).进程中包含线程,一个进程中可能包含一个或者多个线程,但是不能一个也不包含.
2).同一个进程里的多个线程之间,共用了这个进程分配到的所有资源(主要是指内存和文件描 述符表)
这就意味着,线程1 new 的对象,在线程2,3中都能直接使用.线程1打开的文件,在线程2,3中都 能直接使用.
🐝2.区别
1).线程是操作系统调度执行的基本单位.
如果一个进程中有多个线程,这多个线程都是独立在CPU上执行的
2).进程是操作系统资源分配的基本单位.