> For the complete documentation index, see [llms.txt](https://lvxixiao.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lvxixiao.gitbook.io/blog/os/progress/construction.md).

# 多线程结构进程

#### 多线程结构进程

![](https://3355579712-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGG21ze3mQ3ha0y5kNn%2F-LJ1wye6p7hhXyEmBQ8h%2F-LJ20Y8hoHZ1iOT2n146%2FQQ%E5%9B%BE%E7%89%8720180624160439.png?alt=media\&token=5a1f1638-b03f-43e0-b7df-5386b7796042)

#### 多线程环境下进程的概念

在多线程环境中，进程是操作系统中进行保护和资源分配的独立单位，具有用来容纳进程映像的虚拟地址空间和对进程、文件、设备的存取保护机制。

#### 多线程环境下线程的概念

线程是进程的一条执行路径，是调度的基本单位，同一个进程中的所有线程共享进程获得的主存空间和资源。它具有：

* 线程执行状态
* 受保护的线程上下文，当线程不运行时，用于存储现场信息
* 独立的程序指令计数器
* 执行堆栈
* 容纳局部变量的静态存储器

#### 多线程环境下线程的状态与调度

* 线程状态有运行、就绪和睡眠，无挂起
* 与线程状态有关的线程操作有
  * 孵化
  * 封锁
  * 活化
  * 剥夺
  * 指派
  * 结束
* OS感知线程环境下
  * 处理器调度对象是线程
  * 进程没有三状态（或者说只有挂起状态）
* OS不感知线程环境下
  * 处理器调度对象仍是进程
  * 用户空间中的用户调度程序调度线程

#### 并发多线程程序设计的有点

* 快速线程切换
* 减少(系统)管理开销
* (线程)通信易于实现
* 并行程度提高
* 节省内存空间
