文章目录
线程(thread)
- 调度和分派的基本单位
- OS引入线程是为了减少程序在并发执行时所付出的时空(时间和空间)开销,实现更好的并发性
线程特征
线程具有传统进程所具有的很多特征,因此也被称称为轻型进程或进程元
- 调度的基本单位
- 线程作为独立调度和分派的基本单位,能够独立运行,并且统一进程中,线程的切换不会引起进程的切换,但是一个进程的的线程切换到另一个进程中的线程时必然会引起进程的切换
- 并发性
- 一个进程中的多个线程之间可以并发执行
- 拥有资源
- 进程拥有资源并可作为系统中拥有资源的一个基本单位
- 线程几乎不拥有资源,拥有的一点也是为了确保自身能独立运行必不可少的资源
- 独立性
- 在同一进程中的不同线程之间的独立性,要比不同进程之间的独立性低得多
- 系统开销
- 线程普遍基本开销比进程小
- 支持多处理机系统
- 对于传统的进程(单线程进程):进程只能运行在一个处理机上
- 对于多线程进程:其可以将一个进程中的多个线程分配到多个处理机上并行运行
线程状态
和进程基本一样
- 执行状态:线程以获得处理机而正在执行
- 就绪状态:线程与已具备各种执行条件,只需再获得CPU便可立即执行
- 阻塞状态:线程在执行中因某事而受阻,进而处于暂停状态
三种状态的转换与进程的转换一样
线程的三种实现方式
无论是进程还是线程,都必须直接或者间接取得内核的支持。
-
内核支持线程(kernel supported thread,KST)
- 优点
- 在多处理器系统中,内核能够同时调度同一个进程中的多个线程并行执行;
- 如果进程中一个线程被阻塞了,内核可以调度该进程中的其他线程占有处理器运行,也可以运行其它进程中的线程;
- 内核本身可以使用多线程技术,以提高系统的执行和效率。
- 缺点
- 对于用户级线程切换时,由于用户进程的线程是在用户态运行的,需要从用户态转到内核态进行,导致切换时开销较大。
- 优点
-
用户级线程(user level thread,ULT)
- 优点
- 线程不需要转换到内核空间。对一个进程而言,其所有线程的管理数据结构均在进程的用户空间中,管理线程切换的线程库也在用户地址空间中运行,节省了切换的开销和内核资源
- 调度算法可以是进程专用的。在不干扰系统调度的情况下,不同的进程可以根据自身的需要,来选择不同的调度算法对自己的线程进行管理和调度,而与操作系统的低级调度算法无关
- 用户级线程实现与OS平台无关,其属于用户程序的一部分,可以在不支持线程机制的操作系统平台上实现。
- 缺点
- 系统调用阻塞问题。当线程因系统调用而被阻塞,进程内的所有线程都会阻塞(以进程为调度单位的原因)。
- 在单纯的用户级线程实现方式中,多线程不能利用多处理进行多重处理的优点。内核每次分配给一个进程仅有一个CPU,进程中只有一个线程可以执行,在该线程放弃CPU之前,其它线程只能等待。
- 优点
-
两种线程混合式线程
- 多对一模型
- 一对一模型
- 多对多模型