操作系统:线程与进程

1. 核心概念:线程与进程的区别

理解线程的第一步是搞清楚它和进程的关系:

  • 进程是"工厂":它是资源分配的单位,拥有独立的内存空间、文件句柄等资源。
  • 线程是"工人":它是CPU调度的单位,同一个进程内的线程共享进程的资源(内存、文件),但每个线程有自己的私有背包(寄存器、栈)。

关键点: 线程之间通信非常方便(直接读写共享内存),但也因此带来了风险,需要处理同步问题。

2. 线程的生命周期与调度

操作系统通过调度器来决定哪个线程占用CPU。线程通常经历以下状态:

  • 新建:线程被创建。
  • 就绪:等待CPU调度。
  • 运行:正在执行代码。
  • 阻塞:等待I/O或锁释放。
  • 死亡:任务结束。

调度策略(如时间片轮转、优先级调度)决定了系统的并发效率。理解这一点有助于编写高并发程序。

3. 编程中的核心挑战:同步与互斥

这是多线程编程最难的部分,也是面试和实战的重灾区。

  • 竞态条件 :多个线程同时修改同一个变量,导致结果不可预测。
    • 例子: 两个线程同时执行 count++,最终结果可能少1。
  • 临界区:访问共享资源的代码段,必须保证一次只有一个线程进入。
  • 锁机制
    • 互斥锁:最基础的锁,保证临界区的互斥访问。
    • 读写锁:允许多读单写,适合读多写少的场景。
    • 自旋锁:线程在获取锁失败时循环等待,不释放CPU,适用于锁持有时间极短的场景。
  • 死锁 :两个线程互相等待对方持有的锁,导致永久阻塞。
    • *产生条件:* 互斥、占有并等待、不可抢占、循环等待。
    • *解决策略:* 银行家算法、按顺序加锁、设置超时时间。
相关推荐
求知也求真佳10 小时前
S07---S11 | 系统加固闭环总结:让你的 AI Agent 从 “能跑” 到 “稳跑、安全跑、长期跑”
开发语言·agent
JAVA学习通10 小时前
开云集致 Java开发 实习 一面
java·开发语言
小陈工10 小时前
Python异步编程进阶:asyncio高级模式与性能调优
开发语言·前端·数据库·人工智能·python·flask·numpy
阿旭超级学得完10 小时前
C++11(初始化)
java·开发语言·数据结构·c++·算法
是有头发的程序猿10 小时前
竞品店铺拆解:1688店铺首页装修数据API Python实战教程
开发语言·python
一只大袋鼠10 小时前
SpringMVC全局异常处理
java·开发语言·springmvc·javaweb
多加点辣也没关系10 小时前
设计模式-抽象工厂模式
java·设计模式·抽象工厂模式
rit843249910 小时前
基于 MATLAB 的坐标变换程序
开发语言·matlab
不知名的老吴11 小时前
C++中emplace函数的不适场景总结(一)
java·开发语言·c++
LJianK111 小时前
线程安全、线程同步、竞态条件
java·开发语言