调度基础:批处理、分时与实时系统
调度基础:批处理、分时与实时系统 你有没有想过一个问题:你的笔记本同时开着浏览器、IDE、音乐播放器、十几个后台进程,CPU 核心却只有几个。它们凭什么看起来都在"同时"运行?答案...
调度基础:批处理、分时与实时系统 你有没有想过一个问题:你的笔记本同时开着浏览器、IDE、音乐播放器、十几个后台进程,CPU 核心却只有几个。它们凭什么看起来都在"同时"运行?答案...
死锁基础:产生条件、检测与解除 上一篇哲学家进餐留下了一张"环形等待"的图:五个人转着圈互相等对方手里的筷子,谁也吃不上。那不是个孤立的谜题,而是并发世界里一类最特殊故障的缩影——...
经典同步问题:生产者消费者、读者写者与哲学家 生产者消费者、读者写者、哲学家进餐——这三道题几乎每本操作系统教材都讲,很多人当成考试题背了答案就丢。但如果你做过几年后端,会越来越体会到一件事:线上那些...
管程与消息传递:更高层的并发抽象 到上一篇为止,你手里已经有了一套完整的并发工具:互斥锁、信号量、条件变量。理论上它们足够解决任何同步问题了。但只要你真用它们写过稍微复杂点的并发程序,就会有切肤之痛—...
信号量与条件变量:同步机制的经典工具 上一篇我们把互斥讲透了,但你很快会撞上互斥锁解决不了的一类问题。设想一个任务队列:消费者线程拿到锁、发现队列是空的——然后呢?它能做什么?继续持锁等?那生产者永远...
互斥与临界区:锁的最小问题模型 如果你写过后端服务,几乎一定遇到过这种事:单元测试跑得好好的,上线后偶尔出现一个对不上的数字——计数器少加了一次、库存超卖了一件、余额算错了几分。重跑一遍又复现不出来。...
进程同步基础:并发为什么会出错 有一类 bug,最让工程师崩溃:代码每一行单独看都对,单线程跑一万遍都正确,可一上多线程、一上生产环境的高并发,结果就时不时算错——而且你想复现它,它又好端端的。订单被...
线程实现模型:用户级线程与内核级线程 上一篇我们说"线程是 CPU 调度的基本单位"。但这里藏着一个一直没点破的问题:这个"调度",到底是谁在做?是操作系统内核...
线程基础:为什么要有线程 上一组我们已经把进程讲透了——进程是带着独立地址空间、资源和 PCB 的执行实体,操作系统靠它来隔离和调度任务。既然进程已经能表示"一个运行中的程序",操...
进程状态与切换:CPU 如何在任务间切换 打开你的电脑,看一眼任务管理器或 top:几百个进程赫然在列。可你的 CPU 也许只有 8 个核心——同一时刻物理上最多只能真正执行 8 条指令流。那剩下几百...