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/