在解释进程之前,我们要知道在操作系统中存在就绪队列和阻塞队列
进程
进程基本概念
- 进程是执行中的程序, 也就是说进程是动态的, 程序是静态的
- 进程是操作系统分配资源的最小单位,有一个进程控制块(PCB), 有自己唯一的一个进程标识符(PID)
- 进程之间相互独立, 内存不共享
- 每个进程都是一个实体, 每个进程都有属于自己的一块内存, 进程是一个执行中的程序
- 进程的创建,销毁,切换的开销都比较大
- 进程只能创建子进程, 无法创建平级进程
进程三种状态
- 就绪: 获取到除CPU之外的其他所有资源, 只要处理器分配资源就可以马上运行, 此时进程处于就绪队列中, 等待获得处理机
- 运行: 就绪状态的进程获取到CPU之后转为运行状态, 进程开始执行
- 阻塞: 进程申请的资源未被满足, 比如申请一个临界资源时(临界区是进程访问临界资源的那一段代码), 资源正在被其他进程使用, 这时进程进入阻塞状态, 释放处理器, 进程的阻塞是主动的, 也就是自己将自己阻塞, 这时进程会被加入阻塞队列, 在实际中, 可能会有多个阻塞进程, 分别放置因为不同原因被阻塞的进程. 当一个进程使用完临界资源后, 会到阻塞队列中去唤醒处于阻塞队列头的进程.
CPU处理进程方式
时间片轮转: 给每个进程分配一个时间片, 如果进程在时间片内执行完就直接执行下一个进程, 如果没执行完, 进程释放CPU给下一个进程 优先级队列: 在优先级队列中, 每个进程都会被分配优先级(优先级有静态和动态之分, 所谓静态便是在整个运行过程中优先级不会改变, 而动态优先级在运行时, 优先级会发生改变),处理机每次选择当前优先级最高的进程执行. 非抢占式和抢占式区别: 非抢占式: 在进程运行时, 不允许别的进程剥夺当前运行进程的处理器, 在这种情况下, 在用优先级分配处理机时, 正在运行的进程优先级不一定是当前所有进程中优先级最高的, 因为可能在进程运行过程中有更高的进程被加入到就绪队列中. 抢占式: 在进程运行中, 已获得处理机的进程可能会被新来的优先级更高的进程剥夺处理机.
线程
线程基本概念
- 线程是CPU的基本调度单位
- 一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源
- 不同进程之间的线程相互不可见
- 线程不能独立执行
- 一个线程可以创建和撤销另外一个线程
进程和线程的区别
- 一个进程至少有一个进程, 一个进程至少有一个线程
- 进程有自己独有的内存单元, 而多个线程共享一块内存单元
- 一个进程死掉对于其他进程无影响, 但是一个线程死掉整个进程都会死掉, 所以多线程程序没有多进程程序健壮
协程
协程基本概念
- 协程是用户模式下的轻量级线程, 协程不被内核所知
- 协程由用户自己调度