计算机多线程的定义:
多线程(Multithreading)是指在同一进程内并发执行多个线程的技术。每个线程代表一个执行流,可以独立执行代码。
在多线程程序中,操作系统会将多个线程的执行时间片交替分配给不同线程,从而使它们看起来几乎同时运行。
多线程的原理涉及操作系统如何调度和管理多个线程的执行、线程之间如何共享资源等方面。

image

多线程的基础

  1. 线程与进程的关系

    • 进程是操作系统资源分配的基本单位,一个进程内可以包含多个线程。
    • 线程是进程的一个执行单元,线程之间共享进程的资源,如内存、文件描述符等。

    每个进程至少有一个线程,通常称为主线程,其他线程则是子线程。多线程在同一进程内共享数据和资源,因此它们的创建和销毁成本较低。

  2. 线程的独立性与共享资源

    • 独立性:每个线程有自己的栈(用于存储局部变量、函数调用等),并且在调度时可以独立运行。
    • 共享资源:多个线程共享同一个进程的地址空间(包括代码段、全局变量、堆等),这使得线程间可以轻松共享数据。但也因此需要谨慎地管理并发访问,以防止数据竞争(data race)和不一致性。
  3. 线程调度
    多线程是通过操作系统的调度机制,使得多个线程在同一进程中并发执行。它可以提高CPU的利用率,并提升程序的效率,尤其在需要处理I/O密集型或计算密集型任务时非常有效。

    操作系统中的线程调度程序负责决定哪些线程运行、何时运行以及运行多长时间。不同的操作系统有不同的线程调度策略,通常会使用 时间片轮转(Round-robin)优先级调度(Priority scheduling)多级队列(Multilevel Queue) 等算法来管理线程的执行顺序。

    线程的调度由操作系统内核管理:

    • 抢占式调度:操作系统内核根据设定的时间片或者优先级来控制线程的运行,强制中断当前线程,切换到其他线程。这是现代操作系统(如Linux、Windows)的常见调度方式。
    • 协作式调度:线程自己决定何时让出CPU时间片,不会被强制中断。这种方式要求线程在合适的时机主动让出CPU时间(例如,在I/O操作时)。
  4. 上下文切换
    在多线程环境中,操作系统需要在不同线程之间切换执行,这个过程称为 上下文切换(Context Switch)。上下文切换涉及保存当前线程的状态(如寄存器值、程序计数器等)并加载下一个线程的状态。上下文切换是多线程的核心机制之一,它让操作系统能够在多个线程之间快速切换。

    上下文切换的代价通常较高,因为涉及到保存和恢复线程状态、更新调度器的数据结构等操作。因此,频繁的上下文切换会影响系统性能。

  5. 线程同步与互斥
    多线程通过同步机制互斥机制来避免资源冲突和数据竞争。

    由于多个线程共享同一个进程的内存空间,线程间可能会并发访问共享资源。如果没有适当的同步机制,多个线程可能会同时修改同一共享变量,从而导致数据不一致或竞争条件(race condition)。

    为了避免这种情况,常用的同步机制有:

    • 互斥锁(Mutex):保护共享资源的访问,确保在任何时刻只有一个线程可以访问某个资源。
    • 读写锁(Read/Write Lock):允许多个线程并行读取共享资源,但在有线程写入资源时,其他线程不能读写。
    • 信号量(Semaphore):控制对某个资源的访问,允许多个线程同时访问有限数量的资源。
    • 条件变量(Condition Variable):用于线程间的协调,允许线程在特定条件满足时继续执行。
  6. 线程的创建与销毁

    • 创建:线程通常由主线程创建,并由操作系统负责分配资源(如栈空间)。线程的创建可以通过系统调用或者在高级编程语言中使用线程库(如Java的Thread类或Python的threading模块)来实现。
    • 销毁:当线程执行完毕,操作系统回收该线程的资源。线程也可以在运行过程中主动结束。
    • 详细请看下文的线程生命周期图。
  7. 线程的并发与并行

    • 并发(Concurrency)指的是多个线程在同一时间段内交替执行,可能并不在同一时刻同时运行。现代操作系统通过时间片轮转让多个线程在一个核心CPU上“看似”同时运行。
    • 并行(Parallelism)指的是多个线程在物理上同时执行,通常需要多个CPU核心同时工作,通常需要支持多核处理器的硬件。

    注:在单核处理器上,操作系统通过时间片轮转实现并发,而在多核处理器上,操作系统可以通过将线程分配到不同的CPU核心上实现并行

线程的生命周期

image

posted on 2024-12-03 17:11  Mysticbinary  阅读(32)  评论(0编辑  收藏  举报