进程(Process)
计算机有各种各样的资源,比如计算资源(CPU,GPU),存储资源(内存,磁盘),网络资源。
操作系统的作用是统一管理着这些资源,实现对资源的抽象。进程就是操作系统进行资源分配和调度的基本单位,进程作为程序独立运行的载体保障程序正常执行,使得操作系统资源的利用率大幅提升。
我们可以通过windows的任务管理器,去直观的感受进程。
线程(Thred)
一个进程可包含多个线程,线程存在的目的是提高进程并发执行的程度。
线程是操作系统进行运行调度的最小单位,包含在进程之中,是进程中实际运行工作的单位。
进程和线程
两者联系:进程的线程共享进程资源
两者区别总结为如下表格:
| 进程 | 线程 | |
|---|---|---|
| 资源 | 资源分配的基本单位 | 不拥有资源 |
| 调度 | 调度开销大 | 调度开销小 |
| 系统开销 | 进程系统开销大 | 线程系统开销小 |
| 并发性 | 进程间并发 | 进程间并发,进程内多线程并发 |
上下文切换
上下文包括
- 寄存器级上下文(cpu的运算器,控制器,高速缓存)
- 用户级上下文(缓存,主存,辅存)
- 系统级上下文
上下文切换的步骤
- 准备就绪进程运行数据
- 保存当前进程运行装填
- 迁出当前进程数据
- 迁入就绪进程数据
- 恢复就绪进程上一次运行状态
- 就绪进程开始运行
进程切换的成本要远大于线程切换成本的
协程(Coroutine)
协程是比线程更小的粒度的执行单元,运行效率更高,可以支持更高的并发。
进程包含线程,线程包含协程,协程的本质就是用户级线程。
协程对比线程,即用户级线程对比内核级线程。
协程由用户自行调度,内核无法干涉。
协程优缺点
-
调度、切换、管理更加轻量
-
内核无法感知协程的存在(对内核来说只有一个线程,当一个协程阻塞,所有协程都阻塞了)