Linux线程(一)基本概念

基本概念

  • 进程:资源管理的最小单位
  • 线程:程序执行的最小单位

每个进程拥有自己的数据段、代码段和堆栈段。

线程通常叫做轻型的进程,包含独立的栈和CPU寄存器状态。线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源。

线程和进程比起来很小,相对来说线程花费更少的CPU资源。

更形象一点:

  • 进程是资源的管理单位
    • 进程就像一个工厂,里面有自己的设备(CPU、内存、文件、网络连接等)
    • 每个工厂(进程)都是独立的,工厂之间不能直接共享设备(但可以通过通信合作)
  • 线程是执行的基本单位
    • 线程就像工人,他们在工厂(进程)里面工作,负责具体的任务
    • 一个工厂(进程)可以有多个工人(线程),他们一起工作,提高效率
  • 线程共享进程资源
    • 工厂里的工人(线程)共用工厂的资源,比如机器(内存、文件、网络等)
    • 但工人们有自己的工作台(栈),不会互相干扰自己的操作步骤
  • 进程之间是隔离的,线程之间是共享的
    • 两个工厂(进程)不能随便使用对方的设备(资源隔离)
    • 但同一个工厂里的工人(线程)可以直接使用工厂的设备(共享资源)

多线程适合任务紧密相关,共享数据的场景;多进程适合任务独立,互不干扰的场景。

ULT和KLT

  • 用户级线程(User-Level Thread, ULT)
  • 内核级线程(Kernel-Level Thread, KLT)

用户级线程是完全由用户态的线程库管理,操作系统内核并不知道这些线程的存在。

  • 线程管理由用户程序自己负责(就像选手自己决定何时跑、休息)
  • 切换线程时不需要内核介入,上下文切换更快
  • 如果一个线程阻塞,整个进程都会挂起(一个选手倒下,整个队伍都停下)
  • 适合轻量级任务,但不适合I/O密集型任务

内核级线程是由操作系统内核管理的线程,切换线程由内核调度器负责。

  • 内核知道所有线程的存在,并负责调度(裁判决定选手何时跑)
  • 一个线程阻塞不会影响整个进程(一个选手休息,其他人还能继续跑)
  • 线程切换涉及内核态和用户态切换,开销较大
  • 适合多核CPU调度、多线程并发任务,如 I/O 密集型任务

Linux线程(一)基本概念
http://akichen891.github.io/2025/03/31/Linux线程1/
作者
Aki
发布于
2025年3月31日
更新于
2025年3月31日
许可协议