一文讲透“进程、线程、协程”
文章插图
本文从操作系统原理出发结合代码实践讲解了以下内容:
- 什么是进程 , 线程和协程?
- 它们之间的关系是什么?
- 为什么说Python中的多线程是伪多线程?
- 不同的应用场景该如何选择技术方案?
- ...
当程序需要运行时 , 操作系统将代码和所有静态数据记载到内存和进程的地址空间(每个进程都拥有唯一的地址空间 , 见下图所示)中 , 通过创建和初始化栈(局部变量 , 函数参数和返回地址)、分配堆内存以及与IO相关的任务 , 当前期准备工作完成 , 启动程序 , OS将CPU的控制权转移到新创建的进程 , 进程开始运行 。
文章插图
操作系统对进程的控制和管理通过PCB(Processing Control Block) , PCB通常是系统内存占用区中的一个连续存区 , 它存放着操作系统用于描述进程情况及控制进程运行所需的全部信息(进程标识号,进程状态,进程优先级,文件系统指针以及各个寄存器的内容等) , 进程的PCB是系统感知进程的唯一实体 。
一个进程至少具有5种基本状态:初始态、执行状态、等待(阻塞)状态、就绪状态、终止状态
- 初始状态:进程刚被创建 , 由于其他进程正占有CPU所以得不到执行 , 只能处于初始状态 。
- 执行状态:任意时刻处于执行状态的进程只能有一个 。
- 就绪状态:只有处于就绪状态的经过调度才能到执行状态
- 等待状态:进程等待某件事件完成
- 停止状态:进程结束
操作系统对把CPU控制权在不同进程之间交换执行的机制成为上下文切换(context switch) , 即保存当前进程的上下文 , 恢复新进程的上下文 , 然后将CPU控制权转移到新进程 , 新进程就会从上次停止的地方开始 。 因此 , 进程是轮流使用CPU的 , CPU被若干进程共享 , 使用某种调度算法来决定何时停止一个进程 , 并转而为另一个进程提供服务 。
单核CPU双进程的情况
文章插图
进程直接特定的机制和遇到I/O中断的情况下 , 进行上下文切换 , 轮流使用CPU资源
双核CPU双进程的情况
文章插图
每一个进程独占一个CPU核心资源 , 在处理I/O请求的时候 , CPU处于阻塞状态
进程间数据共享系统中的进程与其他进程共享CPU和主存资源 , 为了更好的管理主存 , 现在系统提供了一种对主存的抽象概念 , 即为虚拟存储器(VM) 。 它是一个抽象的概念 , 它为每一个进程提供了一个假象 , 即每个进程都在独占地使用主存 。
虚拟存储器主要提供了三个能力:
- 将主存看成是一个存储在磁盘上的高速缓存 , 在主存中只保存活动区域 , 并根据需要在磁盘和主存之间来回传送数据 , 通过这种方式 , 更高效地使用主存
- 为每个进程提供了一致的地址空间 , 从而简化了存储器管理
- 保护了每个进程的地址空间不被其他进程破坏
- 一文看懂三星Galaxy S21系列发布会所有亮点
- 主板|主板名字带WiFi和不带有什么区别?一文读懂
- 微软发布新版Sysinternals组件Sysmon 13 可用于恶意软件进程篡改检测
- 一文读懂,书架箱和落地箱到底哪个好?
- 10nm进程受阻,芯片狂人梁孟松出走,中芯国际如何突破困境?
- 录音笔|科技解放生产力 录音笔的智能化进程
- 关闭一个进程 AMD锐龙CPU降温22.5℃
- 有史以来最大升级?一文看懂OriginOS带来的改变
- 超大杯来了!一文看懂OPPO Reno5 Pro+最大升级
- 简单一文教你制作多语言的Qlik Sense应用程序