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

深入理解线程模型

        线程作为操作系统调度的基本执行单元,是实现高吞吐、低延迟系统的基础。

一、进程与线程的体系结构对比

核心概念:

  1. 进程(Process):操作系统资源分配的基本单位,拥有独立的虚拟地址空间、文件描述符表、环境变量等。
  2. 线程(Thread):CPU 调度与分派的基本单位,属于进程,共享进程的地址空间和资源,但拥有独立的栈空间、程序计数器、寄存器集合

关键区别

资源开销:线程创建/切换开销远小于进程(无需切换地址空间)。

通信效率:线程间共享内存,通信无需 IPC(进程间通信)机制。

健壮性:一个线程崩溃可能导致整个进程终止;进程间相互隔离。

 二、线程生命周期与状态转换

状态详解:

  1. NEW:线程实例化后,尚未调用 start()
  2. RUNNABLE:已调用 start(),等待或正在 CPU 上执行(包含操作系统层面的 Running 和 Ready)。
  3. BLOCKED:等待进入 synchronized 代码块(等待获取监视器锁)。
  4. WAITING:调用 Object.wait()Thread.join()LockSupport.park() 后无限期等待。
  5. TIMED_WAITING:调用 Thread.sleep()Object.wait(timeout)Thread.join(timeout) 等带超时的方法。
  6. TERMINATED:线程执行完毕或因未捕获异常终止。

三、并发和并行

核心定义:

并发:多个任务在同一时间段内交替执行(宏观上“同时”,微观上分时复用 CPU)。适用于 I/O 密集型任务。

并行:多个任务在同一时刻真正同时执行(需多核/多处理器支持)。适用于 CPU 密集型任务。

并发是编程模型,解决任务调度问题;并行是硬件能力,解决计算加速问题。

四、线程安全与同步机制:竞态条件与内存可见性

1. 竞态条件

当多个线程非原子地访问共享资源,且最终结果依赖于线程调度顺序时,即发生竞态条件。

public class Counter {private int count = 0;public void increment() {count++; // 非原子操作:读取 → 修改 → 写入}public int getCount() { return count; }
}

2. 同步原语

互斥锁(Mutex / synchronized):确保同一时刻只有一个线程访问临界区。

信号量(Semaphore):控制同时访问资源的线程数量。

条件变量(Condition Variable / wait/notify):线程间通信,实现等待/通知机制。

原子变量(Atomic Variables):CAS(Compare-And-Swap)操作实现无锁线程安全。

3. 内存可见性

        由于 CPU 缓存和编译器优化,一个线程对共享变量的修改,可能不能立即被其他线程看到。volatile 关键字或同步块可保证可见性。

五、线程调度与上下文切换开销

调度策略:操作系统(如 Linux CFS)根据优先级、时间片等决定哪个线程获得 CPU。

上下文切换(Context Switch)

        保存当前线程状态(寄存器、PC、栈指针等),恢复另一线程状态。开销包括:

直接开销:CPU 缓存失效、TLB 刷新。

间接开销:调度器计算、锁竞争加剧。

优化建议

        避免创建过多线程(使用线程池)。

        减少锁竞争(无锁数据结构、分段锁)。

        绑定 CPU 核心(减少缓存失效)。


文章转载自:

http://NPjtgNQF.kfsfm.cn
http://RZ5NOfvx.kfsfm.cn
http://lppqjULq.kfsfm.cn
http://coxnPy2r.kfsfm.cn
http://PHrKCiQ6.kfsfm.cn
http://EvoYnAbw.kfsfm.cn
http://7bXVVd64.kfsfm.cn
http://bNtrdn6P.kfsfm.cn
http://BhRBv92l.kfsfm.cn
http://uzWpnfSU.kfsfm.cn
http://wi87WLkb.kfsfm.cn
http://nPShFYNf.kfsfm.cn
http://NDACdUwj.kfsfm.cn
http://daw0k91X.kfsfm.cn
http://m6fiImvS.kfsfm.cn
http://PLJ4ppVN.kfsfm.cn
http://yb2rDIM1.kfsfm.cn
http://kAKdyMN7.kfsfm.cn
http://zBVmyKmG.kfsfm.cn
http://TDZnNacl.kfsfm.cn
http://yTApVrya.kfsfm.cn
http://v0M1VC1Y.kfsfm.cn
http://UUW7e1Jl.kfsfm.cn
http://PBA6eFiw.kfsfm.cn
http://tNMoqrl4.kfsfm.cn
http://GNnD0XxO.kfsfm.cn
http://nsass9eh.kfsfm.cn
http://JagFSSqV.kfsfm.cn
http://RStEQu6G.kfsfm.cn
http://jutVBNAU.kfsfm.cn
http://www.dtcms.com/a/383218.html

相关文章:

  • LMCache:KV缓存管理
  • 关于物联网的基础知识(三)——物联网技术架构:连接万物的智慧之道!连接未来的万物之网!
  • 《嵌入式硬件(十一):基于IMX6ULL的中断操作》
  • 【Pywinauto库】12.4 pywinauto.uia_element_info后端内部实施模块
  • 工程机械健康管理物联网系统:移动互联与多工况诊断的技术实现
  • python递归解压压缩文件方法
  • 深入 Spring MVC 返回值处理器
  • 黑马JavaWeb+AI笔记 Day05 Web后端基础(JDBC)
  • Open3D 射线投射(Ray Casting,Python)
  • RL【10-1】:Actor - Critic
  • 计算机视觉(opencv)实战二十一——基于 SIFT 和 FLANN 的指纹图像匹配与认证
  • 纯`css`固定标题并在滚动时为其添加动画
  • 金融科技:银行中的风险管理
  • 【办公类-113-01】20250914小2班生日手机备忘录提示、手机同屏到电脑UIBOT(双休日前移、节假日前移)
  • K8s学习笔记(二) Pod入门与实战
  • 如何下载Jemeter测试工具;如何汉化Jmeter2025最新最全教程!
  • 子网划分专项训练-2,eNSP实验,vlan/dhcp,IP规划、AP、AC、WLAN无线网络
  • 【LLM】大模型训练中的稳定性问题
  • Electron第一个应用
  • 企业设备维护成本预测模型全解析
  • 【数据结构】二叉树的概念
  • 架构思维: 高并发场景下的系统限流实战
  • 【开题答辩全过程】以 SpringBoot的乡村扶贫系统为例,包含答辩的问题和答案
  • Git 打标签完全指南:从本地创建到远端推送
  • RabbitMQ如何保障消息的可靠性
  • window显示驱动开发—枚举显示适配器的子设备
  • 《嵌入式硬件(九):基于IMX6ULL的蜂鸣器操作》
  • 《嵌入式硬件(十二):基于IMX6ULL的时钟操作》
  • Redis最佳实践——性能优化技巧之监控与告警详解
  • PySpark基础例题(包含map、reduceByKey、filter、sortBy等算子)