Linux22 进程与线程以及内核级线程

线程与进程

进程:一个正在运行的程序。是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。每个进程拥有独立的内存空间(代码段、数据段、堆、栈)、文件描述符、信号处理等资源。

线程 :进程内部的一条执行路径(序列),是进程内的一个执行单元 ,是操作系统进行调度的最小单位。一个进程可以包含多个线程,所有线程共享进程的内存空间和资源(如文件描述符、全局变量),但每个线程有独立的栈和寄存器。

特性 进程(Process) 线程(Thread)
资源占用 独立内存空间(大)、独立文件描述符等 共享进程资源(内存、文件描述符等),仅私有栈和寄存器(小)
创建 / 销毁开销 大(需分配内存、初始化资源) 小(仅需创建栈和寄存器,共享进程资源)
切换开销 大(需切换页表、刷新 TLB 等) 小(仅切换栈和寄存器,共享内存空间)
通信方式 复杂(需跨进程机制,如管道、信号量、共享内存) 简单(直接读写共享内存中的全局变量)
独立性 高(一个进程崩溃不影响其他进程) 低(一个线程崩溃可能导致整个进程崩溃)
并发粒度 粗(进程间并发) 细(进程内线程间并发)
调度单位 操作系统调度的基本单位 操作系统调度的最小单位
  1. 资源与内存
  • 进程 :每个进程有独立的虚拟地址空间,进程间的内存是隔离的(如进程 A 无法直接访问进程 B 的内存)。例如,打开两个终端窗口运行ls命令,会创建两个独立进程,各自占用独立内存。

  • 线程:同一进程的所有线程共享进程的虚拟地址空间(代码段、全局变量、堆等),但每个线程有自己的栈(用于函数调用和局部变量)和寄存器(记录当前执行状态)。例如,浏览器的 "多标签页" 通常由同一进程的多个线程实现,共享浏览器的内存资源。

  1. 开销与效率
  • 进程:创建 / 销毁时需操作系统分配 / 释放内存、文件描述符等资源,开销较大(毫秒级);进程切换时需保存整个进程的状态(内存映射、文件句柄等),切换成本高。

  • 线程:创建 / 销毁仅需分配 / 释放线程栈和寄存器,开销小(微秒级);线程切换只需保存线程私有状态(栈、寄存器),切换成本低,适合高频并发场景。

单进程单线程:单进程单线程指程序仅包含一个进程,且该进程内仅运行一个线程,所有任务串行执行,是最基础的程序架构。
单进程多线程:单进程多线程指程序包含一个进程,且该进程内运行多个线程,线程共享进程的内存资源(代码段、数据段、堆),但拥有独立的线程栈,可并行执行任务。

对比维度 单进程单线程 单进程多线程
CPU 利用 仅用一个核心,多核性能无法发挥 可利用多核,并行处理提升效率
资源共享 无线程间共享问题(仅一个线程) 共享进程资源,需锁保护共享数据
调度成本 无线程切换开销,调度效率高 存在线程切换开销,频繁切换影响性能
并发能力 串行执行,无并发能力 支持并行并发,可处理多任务
故障容忍 单线程崩溃→进程终止 单线程崩溃→进程终止(与单线程一致)
开发复杂度 逻辑简单,无需处理线程同步 需处理线程同步(锁、信号量),避免数据竞争
资源占用 进程资源 + 1 个线程栈,总占用少 进程资源 + 多个线程栈,总占用略高

内核级线程

用户级线程:用户创建管理,开销小,可以很多,并发

内核级线程:内核用创建管理,开销大,分配在两个处理器,并行

组合模式:(多对多线程模型)是对用户级线程和内核级线程的优化整合

  • 用户级线程应对 "大量线程" 和 "低开销" 需求,解决内核级线程数量有限、开销高的问题;

  • 内核级线程应对 "多核并行" 和 "阻塞处理" 需求,解决用户级线程无法利用多核、一阻全阻的问题;

  • 通过线程库实现两层线程的动态映射和调度,成为现代多核环境下高并发、高性能程序的主流线程模型。

特性 用户级线程(ULT) 内核级线程(KLT) 组合模式(多对多)
管理主体 用户线程库(用户态) 操作系统内核(内核态) 线程库(用户态)+ 内核(内核态)
映射关系 多对一(多个 ULT 映射 1 个 KLT) 一对一(1 个 KLT 映射 1 个 ULT) 多对多(多个 ULT 映射少量 KLT)
上下文切换开销 低(用户态切换,无需内核干预) 高(内核态切换,需保存内核上下文) 低(ULT 切换在用户态,KLT 切换少)
并行能力 差(多个 ULT 共享 1 个 KLT,无法利用多核) 好(1 个 KLT 对应 1 个 CPU 核心,支持多核并行) 好(KLT 数量匹配 CPU 核心,支持并行)
阻塞处理 差(1 个 ULT 阻塞,整个 KLT 阻塞) 好(1 个 KLT 阻塞,不影响其他 KLT) 好(ULT 阻塞时,线程库切换其他 ULT 到 KLT)
线程数量上限 高(可创建数千个,开销小) 低(创建过多会消耗大量内核资源) 高(基于 ULT 扩展,数量无明显限制)
相关推荐
明天…ling7 小时前
Linux+Apache+MySQL+PHP 架构下搭建 Discuz 社区论坛
linux·服务器·apache
Ghost Face...7 小时前
GRUB配置文件解析与启动流程详解
linux·运维·服务器
鄃鳕7 小时前
pyside6 qt 事件循环
开发语言·qt
java1234_小锋8 小时前
PyTorch2 Python深度学习 - transform预处理转换模块
开发语言·python·深度学习·pytorch2
杨福瑞8 小时前
数据结构:单链表(1)
c语言·开发语言·数据结构
来来走走9 小时前
kotlin学习 基础知识一览
android·开发语言·kotlin
前端世界13 小时前
从零搭建多子网 DHCP 服务:CentOS 双网卡多作用域实战与原理解析
linux·运维·centos
程序员卷卷狗13 小时前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm
lly20240614 小时前
ASP Folder:深入解析其功能与使用技巧
开发语言