当前位置: 首页 > ops >正文

Linux线程与进程关系及底层实现

在操作系统中,线程切换相比进程切换更轻量级的关键原因之一是 缓存(Cache)的有效性,尤其是对 CPU 缓存(如 L1/L2/L3)和 TLB(Translation Lookaside Buffer)的影响。以下从缓存角度详细分析这一差异:


1. 地址空间与 TLB 的影响

  • 进程切换
    • 进程拥有独立的虚拟地址空间,切换时需要 切换页表(Page Table),导致 TLB 被刷新或失效。
    • TLB 是缓存虚拟地址到物理地址映射的硬件组件,失效后需要重新加载映射条目,增加内存访问延迟
  • 线程切换
    • 线程共享进程的地址空间,切换时无需切换页表,TLB 条目保持有效
    • 减少因 TLB 失效导致的性能损失,内存访问效率更高

2. CPU 缓存的局部性保留

  • 进程切换
    • 进程间数据隔离,新进程的代码和数据与旧进程的缓存内容(如 L1/L2/L3)无重叠
    • 缓存中旧进程的数据对新进程无用,导致 缓存冷启动(Cache Cold Start),需重新加载数据到缓存,增加延迟。
  • 线程切换
    • 线程共享进程的代码段、数据段和堆内存,切换后新线程访问的代码和数据 可能仍在缓存中(尤其是共享的 L3 缓存)。
    • 缓存命中率更高,减少访问主存的次数,降低延迟

3. 上下文切换的数据量差异

  • 进程切换
    • 需要保存和恢复 完整的上下文,包括寄存器状态、页表指针、文件描述符表、信号处理表等。
    • 上下文数据量大,切换时需 频繁读写内存,对缓存造成压力。
  • 线程切换
    • 仅需保存和恢复 线程独有资源(如栈指针、寄存器状态、线程本地存储)。
    • 共享的资源(如内存、文件描述符)无需切换,数据量更小,对缓存更友好。

4. 缓存一致性协议的影响

  • 多核 CPU 中,不同线程可能运行在不同核心上:
    • 进程切换
      • 若新进程的线程被调度到不同核心,原核心的缓存数据无法复用,需通过缓存一致性协议(如 MESI)同步或重新加载,增加总线流量
    • 线程切换
      • 同一进程的线程共享数据,即使跨核心调度,其他核心的 L3 缓存可能已缓存共享数据,减少数据同步开销

5. 写时复制(Copy-on-Write)的优化

  • 进程创建
    • fork() 使用写时复制技术,父子进程共享内存直到发生写入操作。虽然减少了内存拷贝,但首次写入会触发页复制,可能 污染缓存(新页需要加载到缓存)。
  • 线程创建
    • 线程直接共享进程内存,无写时复制开销,缓存内容保持连贯性

6. 实际性能对比

通过实验可以观察到以下现象:

  1. 缓存局部性优势
    • 线程切换后,若新线程访问的数据与旧线程有重叠(如共享的全局变量),缓存命中率显著高于进程切换。
  2. TLB 未命中率
    • 进程切换后,TLB 未命中率可能骤增(需重新加载页表条目),而线程切换的 TLB 未命中率几乎不变。

总结

线程切换更轻量级的本质在于 缓存和 TLB 的有效性保留

  1. 共享地址空间:避免 TLB 刷新和页表切换,减少内存访问延迟。
  2. 缓存局部性保留:共享数据可能已缓存在 L3 或跨核缓存中,减少冷启动开销。
  3. 上下文数据量小:减少对缓存的污染和内存带宽的占用。

因此,在高并发场景(如 Web 服务器、数据库)中,线程的轻量级切换特性使其更适合作为并发的基本单位,尤其在多核 CPU 和缓存层次结构复杂的现代计算机中,优势更加显著。

http://www.xdnf.cn/news/13081.html

相关文章:

  • 瑞数信息入选Gartner《中国API管理市场指南》
  • 亚马逊测评,采购环境安全需要解决哪些问题,提高成功率
  • 验证redis数据结构
  • 课堂笔记:吴恩达的AI课(AI FOR EVERYONE)-第一周part2 人工智能术语人工智能公司应该怎么做
  • 恶补电源:1.电桥
  • 【第一章:人工智能基础】01.Python基础及常用工具包-(3)常用数据科学工具包
  • 性能测试分析
  • 深度剖析Diffusion与Transformer在图像生成中的计算逻辑与融合之道
  • 火山引擎云服务器使用感怎么样
  • HarmonyOS运动开发:打造你的专属运动节拍器
  • python打卡day49
  • 大数据学习(135)-Linux系统性指令
  • Windows 环境下,使用 ESP32 JTAG 接口进行固件下载
  • 浅谈互联网主流通信协议
  • 【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
  • 【堆垛策略】设计方法
  • SAP软件年结科目余额结转详解
  • ShuffleNet 改进:与通道注意力机制(CAM)的结合实现
  • 如何用Coze+Fetch快速构建结构化文档
  • deepbayes lecture2:变分推断
  • 【实证分析】上市公司企业风险承担水平数据集(2000-2022年)
  • Houdini POP入门学习06 - 物理属性2
  • 十二、MySQL 8 新特性底层原理
  • 角色塑造江湖秘籍
  • 火绒弹窗拦截6.0.6.1\5.0.77.1绿色独立版_WinAll
  • 【samba】umount:**** target is busy. ubuntu24.04 卸载挂载点
  • 土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
  • 现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
  • JS红宝书笔记 10.11-10.16 函数
  • Linux云原生安全:零信任架构与机密计算