操作系统中的线程

2025 年 5 月 31 日 | 阅读 6 分钟

什么是操作系统中的线程?

在操作系统中,线程是进程内的一个轻量级执行单元。进程是正在执行的程序的实例,而线程是进程的一个子集,可以在同一进程内与其他线程并发运行。

线程与同一进程中的其他线程共享资源,如内存、文件句柄和网络连接,这使得它们比进程更高效。

操作系统中的线程可用于提高多任务应用程序的响应能力和效率,通过允许程序的不同部分并发执行。它们还可用于执行后台任务,如 I/O 操作或网络通信,而不会阻塞主线程或其他线程。
在现代操作系统中,线程由内核管理,内核提供调度、同步和线程间通信等服务。操作系统使用不同的线程模型,例如一对一模型,其中每个用户级线程映射到一个内核线程;或者多对多模型,其中多个用户级线程可以映射到较少数量的内核线程。

Threads in os

进程可以分解为许多线程。例如,在浏览器中,许多标签页可以视为线程。MS Word 使用多个线程——一个线程格式化文本,另一个线程处理输入,等等。

我们为什么需要线程?

操作系统中的线程提供了多种好处,并提高了系统的整体性能。线程在操作系统中需要的某些原因是

  • 由于线程使用相同的数据和代码,因此线程之间的操作成本很低。
  • 创建和终止线程比创建或终止进程更快。
  • 与进程相比,线程的上下文切换更快。
  • 创建现有进程中的新线程比创建新进程所需的时间少得多。
  • 线程可以共享公共数据,它们不需要使用进程间通信。
  • 处理线程时上下文切换更快。
  • 终止线程比终止进程所需的时间少。

为什么多线程?

在多线程中,其思想是将单个进程划分为多个线程,而不是创建全新的进程。多线程是为了实现并行并提高应用程序的性能,因为它在许多方面都更快,如上所述。多线程的其他优点如下。

  • 资源共享:单个进程的线程共享相同的资源,如代码、数据/文件。
  • 响应能力:程序响应能力使用户能够在程序的一部分被阻塞或执行耗时操作时仍能运行程序。从而提高用户响应能力。
  • 经济性:使用线程更经济,因为它们共享单个进程的资源。另一方面,创建进程的成本很高。

线程的类型

操作系统 中,有两种类型的线程。

  1. 内核级线程。
  2. 用户级线程。

用户级线程

操作系统会忽略用户级线程。用户线程易于实现,由用户完成。如果用户执行用户级线程阻塞操作,则整个进程都会被阻塞。内核级线程完全不知道用户级线程。用户级线程由内核级线程作为单线程进程进行管理。

Java、POSIX 等语言中的线程是示例。

优点

  • 用户线程比内核线程更容易实现。
  • 在不允许内核级线程的操作系统中可以使用用户级线程。
  • 它更有效率。
  • 上下文切换比内核线程花费的时间少。
  • 这不需要对操作系统进行任何更改。
  • 用户级线程的表示相对简单。用户级进程的地址空间包含寄存器、堆栈、PC 和迷你线程控制块。
  • 线程可以轻松创建、切换和同步,而无需进程交互。

缺点

  • 用户级线程未与内核协调。
  • 如果线程导致页面错误,则整个操作将停止。
Threads in os

内核级线程

内核线程被操作系统识别。内核级线程中的每个线程和进程在系统中都有自己的线程控制块和进程控制块。操作系统实现内核级线程。内核知道所有线程并控制它们。内核级线程提供了一个系统调用来创建和管理用户空间线程。内核线程比用户线程复杂。内核线程的上下文切换时间更长。在内核线程执行阻塞操作的情况下,Banky 线程的执行可以继续。

示例:Window Solaris。

Threads in os

内核级线程的优点

  1. 内核级线程完全了解所有线程。
  2. 调度程序可以决定将更多 CPU 时间花费在拥有大量数值的线程进程上。
  3. 内核级线程适用于那些经常阻塞的应用程序。
  4. 线程提高了程序的整体性能。
  5. 线程提高了程序的响应能力。
  6. 线程的上下文切换时间更快。
  7. 线程在进程内共享相同的内存和资源。
  8. 线程之间的通信更快。
  9. 线程在进程内提供并发。
  10. 提高系统吞吐量。
  11. 由于不同的线程可以并行运行,因此线程可以更好地利用多处理器架构并提高效率。

缺点

  • 所有线程都由内核线程管理和调度。
  • 内核线程比用户线程复杂。
  • 内核级线程比用户级线程慢。

线程的组成部分

线程是现代操作系统和编程语言的基本组成部分,它们包含几个关键组件,使它们能够执行并发和并行处理。线程的主要组成部分包括

任何线程都有以下组成部分。

  1. 程序计数器
  2. 寄存器组
  3. 堆栈空间
  4. 线程 ID
  5. 线程优先级
  6. 线程状态
  7. 线程安全
  8. 同步

这些组件协同工作,使线程能够并发执行,并以并行高效的方式执行复杂任务。

线程的好处

  • 提高系统吞吐量:当进程被分解为多个线程,并且每个线程被视为一个作业时,单位时间内完成的作业数量会增加。这就是为什么系统吞吐量也会增加。
  • 有效利用多处理器系统:当一个进程中有多个线程时,您可以在多个处理器上调度多个线程。
  • 更快的上下文切换:线程之间的上下文切换时间比进程上下文切换时间短。进程上下文切换意味着 CPU 开销更大。
  • 响应能力:当进程被分解为多个线程,并且一个线程完成其执行时,该进程可以尽快得到响应。
  • 通信:多线程通信很简单,因为线程共享相同的地址空间,而在进程中,我们采用一些独占的通信策略来在两个进程之间进行通信。
  • 资源共享:代码、数据和文件等资源可以在同一进程中的所有线程之间共享。注意:堆栈和寄存器不能在线程之间共享。每个线程都有自己的堆栈和寄存器。

常见问题

Q1. 线程可以在任何操作系统上运行吗?

线程是现代操作系统的一项基本功能,并且被包括 Windows、macOS、Linux 等在内的大多数操作系统所支持。

Q2. 为什么我们需要操作系统中的线程?

线程是现代操作系统的一项基本功能,因为它们提供了一种实现并发的方法,该方法允许在单个处理器或多个处理器上同时执行多个任务。

Q3. 线程是操作系统的重要组成部分吗?

线程不一定是操作系统的必要组成部分,但它们是一项基本功能,被现代操作系统广泛支持并被许多应用程序使用。