操作系统 线程
线程是进程中任务的单个顺序执行流,因此也被称为执行线程或控制线程。在任何操作系统的进程中,都有一种线程执行方式。除此之外,一个进程中可以有多个线程。同一进程中的每个线程都使用一个单独的程序计数器和一个激活记录和控制块的堆栈。线程通常被称为轻量级进程。
进程可以分成很多线程。 例如 ,在浏览器中,许多标签可以被视为线程。MS Word使用多个线程-从一个线程格式化文本,从另一个线程处理输入,等等。
线程的需求
- 在现有进程中创建新线程比创建新进程花费的时间要少得多。
- 线程可以共享公共数据,不需要使用进程间通信。
- 在处理线程时,上下文切换更快。
- 终止线程所需的时间比终止进程所需的时间少。
线程的类型
在操作系统中,有两种类型的线程。
- 内核级线程。
- 用户级线程。
用户级线程
操作系统不识别用户级线程。用户线程可以很容易地实现,并且由用户来实现。如果用户执行用户级线程的阻塞操作,整个进程将被阻塞。内核级线程不知道用户级线程的存在。内核级线程将用户级线程管理为单线程进程-例如:Java线程,POSIX线程等。
用户级线程的优点
- 与内核线程相比,用户线程更容易实现。
- 用户级线程可以应用于不支持内核级线程的操作系统类型。
- 它更快更有效。
- 与内核级线程相比,上下文切换时间较短。
- 不需要修改操作系统。
- 用户级线程的表示非常简单。寄存器、PC、堆栈和 mini 线程控制块存储在用户级进程的地址空间中。
- 创建、切换和同步线程时不需要进程的干预。
用户级线程的缺点
- 用户级线程与内核之间缺乏协调。
- 如果线程引发页错误,整个进程将被阻塞。
内核级线程
内核级线程识别操作系统。系统中针对每个线程和进程都有一个线程控制块和进程控制块,用于内核级线程。内核级线程由操作系统实现。内核了解所有线程并对其进行管理。内核级线程提供系统调用来从用户空间创建和管理线程。内核线程的实现比用户线程更困难。内核线程的上下文切换时间更长。如果内核线程执行阻塞操作,用户线程的执行可以继续。例子:Window Solaris。
内核级线程的优势
- 内核级线程完全了解所有线程。
- 调度器可以决定在线程数量较大的过程中分配更多的CPU时间。
- 内核级线程适用于那些频繁阻塞的应用程序。
内核级线程的缺点
- 内核线程管理和调度所有线程。
- 内核级线程的实现比用户级线程更加困难。
- 内核级线程比用户级线程慢。
线程的组成部分
任何线程都具有以下组成部分。
- 程序计数器
- 寄存器集
- 栈空间
线程的好处
- 系统吞吐量增加: 当进程分为多个线程,并且每个线程被视为一个作业时,单位时间内完成的作业数量增加。这就是为什么系统的吞吐量也会增加。
- 多处理器系统的有效利用: 当一个进程中有多个线程时,可以在多个处理器上调度多个线程。
- 快速切换上下文: 线程之间的上下文切换时间比进程上下文切换时间少。进程上下文切换意味着CPU的更多开销。
- 响应性: 当进程分为几个线程,并且当一个线程完成执行时,可以尽快对该进程做出响应。
- 通信: 多线程通信简单,因为线程共享相同的地址空间,而在进程中,我们只采用一些专用的通信策略来进行两个进程之间的通信。
- 资源共享: 在一个进程内,所有线程之间可以共享资源,如代码、数据和文件。注意:堆栈和寄存器不能在线程之间共享。每个线程都有自己的堆栈和寄存器。