NOTE

2.7 程序、进程、线程

1. 是什么 程序是指令的集合,存放在硬盘上,是个静态的实体 进程指程序加载到内存,由CPU执行指令,是个动态的实体 线程是进程内的多个执行流 举例: 比如一个视频播放器,安装完后躺在硬盘上,此时就是一堆指令+数据; 播放一个视频的时候这个程序首先加载到内存中,由CPU读取指令并执行 一个视频既有画

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 是什么

程序是指令的集合,存放在硬盘上,是个静态的实体 进程指程序加载到内存,由CPU执行指令,是个动态的实体 线程是进程内的多个执行流

举例: 比如一个视频播放器,安装完后躺在硬盘上,此时就是一堆指令+数据; 播放一个视频的时候这个程序首先加载到内存中,由CPU读取指令并执行 一个视频既有画面又有声音,这两个要同时进行,那么就有两个线程,一个负责声音,一个负责画面

2. 进程-线程-协程的发展历史

2.1. 单进程操作系统

  • 一个进程一个进程的顺序执行
  • 问题
    • 一个进程执行完才能执行下一个进程
    • 如果进程阻塞了,那么会白白浪费CPU的资源

2.2. 多进程/多线程操作系统

  • 一个进程阻塞后切换到下一个进程执行
  • 问题
    • CPU切换成本。进程/线程数量越多,成本越大,高峰时期可能60%用于执行程序,40%用于切换
    • 占用资源大。进程占用4G虚拟内存,线程占用4MB内存

2.3. 协程

  • N:1

    • 优点:协程在用户态线程即完成切换,不会陷入到内核态,这种切换非常的轻量快速
    • 缺点:一旦某协程阻塞,造成线程阻塞,本进程的其他协程都无法执行了,根本就没有并发的能力了
  • 1:1

    • 优点:解决了N:1的问题
    • 缺点:协程的创建、删除和切换的代价都由 CPU 完成
  • M:N

    • 优点:解决了N:1和1:1的缺点
    • 缺点:实现复杂

3. 进程状态转换

  • 就绪状态(ready):等待被调度
  • 运行状态(running)
  • 阻塞状态(waiting):等待资源

4. 进程 VS 线程

进程 线程
定义 程序的动态实体,一个程序至少有一个进程 进程中一个执行路径,一个进程至少有一个线程
基本单位 资源分配的基本单位 系统调度的基本单位
地址空间 有独立的地址空间,不会一崩全崩 共享进程的地址空间,有一个崩溃那么其他也会崩溃
开销 较大 较小
通信 IPC 共享内存

4.1. 进程和线程哪个切换快,为什么

线程切换比进程快,因为线程共享地址空间,而进程有独立的地址空间,如果进程切换还得加上虚拟空间切换的开销

5. 线程 VS 协程

线程由 CPU调度、抢占式的,协程由 用户态调度、协作式

6. 参考