概述
线程是CPU使用的基本单元,他由线程ID。程序计数器,寄存器集合和栈组成,与属于同一进程共享代码段,数据段及其他操作系统资源(如打开文件和信号)。
线程是进程中的一个实体,是调度的基本单位。
线程自身基本上不拥有系统资源,只拥有少许运行中必不可少的私有资源。线程可与同属一个进程的其他线程共享进程的全部资源。
多线程是指在一个进程中可以执行多个线程的能力。传统的操作系统使用的是单线程方式。UNIX支持多用户进程,但是每个线程只有一个线程。Windows支持的是多进程,每个进程可以有多个线程的方式。
线程
线程状态
- 进程中的所有线程共享该进程的状态。
- 线程具有三种基本状态:就绪、执行和阻塞。
- 线程一般不具备挂起状态。
对线程操作
- 一个进程可以创建和撤销一个或多个线程,同一进程中的多个线程可以并发执行。
对线程的操作
- 派生:当系统创建一个进程时,同时也为该进程派生了一个线程,同一进程中的线程可以再派生其他线程。
- 阻塞:当线程需要等待某事件时,它将被阻塞,释放处理机执行其他线程。
- 解除阻塞:当线程的阻塞事件发生,其状态转换为就绪,并插入到就绪队列,等待调度执行。
- 结束
多线程模型
三种模式:
- 多对一模式
将多个用户级线程映射到一个内核级线程,一个线程柱塞,整个进程就阻塞
- 一对一模式
每个用户线程都映射到一个内核线程,允许多个线程并行运行多处理器上,但是每创建用户线程就要创建内核线程,创建内核线程开销影响应用程序性能。所以绝大多数实现限制了系统所支持的线程数量。
- 多对多模式
多路复用许多用户线程到同样数量或者更小数量的内核线程上。用户可以创建任意多的线程,并且相应内核线程能在多处理器系统并发执行,当线程阻塞时,内核可以调度其他线程来执行。
线程的优点
因为要并发,我们发明了进程,又进一步发明了线程。只不过进程和线程的并发层次不同:进程属于在处理器这一层上提供的抽象;线程则属于在进程这个层次上再提供了一层并发的抽象。
除了提高进程的并发度,线程还有个好处,就是可以有效地利用多处理器和多核计算机。多核并不能让一个进程的执行速度提高。但如果讲一个进程分解为若干个线程,则可以让不同的线程运行在不同的核上,从而提高了进程的执行速度。
线程的管理和控制权在用户级进行,线程切换无需内核干预,没有模式切换,减少了模式切换的开销。
操作系统管理进程的开销显著大于管理线程的开销,进程切换的开销也大于线程切换的开销。由于同一进程中的多个线程具有相同的地址空间,他们之间的同步和通信也比较容易。 有些类型的线程切换、同步和通信无需操作系统内核的干预。
==参考资料==:
操作系统概念 第七版