进程状态
运行状态(Running);
就绪状态(Ready):可运行,在排队;
阻塞状态(Block):等待某个事件的发生,在运行中途中断了;
挂起状态: 静止阻塞和静止就绪
静止阻塞 -> 静止就绪 -> 活动就绪
创建状态(new):进程正在被创建时的状态; 结束状态(Exit):进程正在从系统中消失时的状态;
进程特性:
- 并发性、独立性、异步性、动态性(生命周期)
进程 与 程序 的区别
- 程序只是静态的实体,是一组指令的集合,而进程则是动态的,具有从创建到销毁的生命周期,存储在内存中;
- 程序无并发性一说;
- 资源上,程序无资源分配一说;进程可以分配IO等资源(硬件、软件等等资源)
- 上下文
- 通信与同步
线程:线程是进程当中的一条执行流程
优点:并发、共享资源;
进程拥有独立的资源,比如打开的文件,比如内存;线程只独享必不可少的资源,如寄存器和栈;
线程则是cpu调度的单位,同样有就绪阻塞执行三种状态,同样有转换关系
进程调度:线程是调度的基本单位,这里的进程调度指的是调度只有单个“主线程”的进程
抢占调度:从运行到等待,从运行到终止 非抢占调度:从运行到就绪,从等待到就绪
调度算法:
先来先服务(First Come First Severd, FCFS)算法
最短作业优先(Shortest Job First, SJF)调度算法 短作业多了,会使得长作业积压,一直不执行
高响应比优先 (Highest Response Ratio Next, HRRN)调度算法
多级反馈队列(Multilevel Feedback Queue)调度算法 •「多级」表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短。 •「反馈」表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先 级高的队列;
时间片轮转(Round Robin, RR)调度算法 分时系统使用这个算法:
每个进程都会分配一个时间片,该进程只被允许在这个时间片内运行; 时间片如果先用完,会停止进程 如果进程
进程同步
防止因为并发而导致的数据不一致问题
常用方案:
- 信号量 P/V 需手动管理,易出现死锁或优先级反转。
- 互斥锁(Mutex) 仅解决互斥,无法直接处理同步问题(如顺序执行)。
- 条件变量(Condition Variable)
- Java中的管程,其中底层是条件变量
- 消息传递(Message Passing) 原理:进程通过发送/接收消息(如管道、Socket)间接通信,避免共享内存。 优点:天然隔离共享数据,避免竞态条件。 缺点:通信开销较大,适合分布式系统。
go
ch := make(chan int)
go func() { ch <- 42 }() // 发送消息
value := <-ch // 接收消息
临界资源(Critical Resource)
指在多道程序系统中,那些一次只允许一个进程使用的资源。 临界资源在本质上是不可共享的,因为它们需要被互斥访问。