有关linux中进程,线程,任务,调度等的知识整理总结

发布时间:2026/7/17 6:43:32
有关linux中进程,线程,任务,调度等的知识整理总结 文章目录前言一、进程和线程1.1 进程1.2 线程1.3 核心区别二、操作系统中的任务2.1 什么是任务2.2 与进程、线程的关系三、操作系统中的调度3.1调度核心概念3.2 调度三大层级由高到低3.3 调度方式两大分类3.4 调度相关核心问题总结前言在面试或日常开发中多线程与进程是高频出现的核心知识。本文旨在系统性地梳理进程、线程、任务及操作系统调度等关键概念帮助读者构建清晰的知识体系。如有疏漏欢迎指正。一、进程和线程1.1 进程核心定义程序运行起来就是进程拥有独立内存空间、文件句柄、资源、PID进程标识符相互隔离一个进程崩溃不影响其他进程重量级创建销毁开销大进程五大状态新建状态进程刚被创建系统正在分配资源、初始化 PCB 进程控制块还没进入就绪队列暂时不能参与 CPU 调度。就绪状态进程所有资源已备好只差 CPU 时间片进入就绪队列排队随时等待系统调度不占用 CPU。触发进入新建完成、阻塞唤醒、时间片用完让出 CPU。运行状态进程成功拿到 CPU 时间片正在 CPU 上执行代码独享当前 CPU 资源。触发进入操作系统从就绪队列选中调度。阻塞状态等待状态进程主动放弃 CPU等待外部事件完成彻底脱离 CPU 调度就算 CPU 空闲也不会执行。常见等待事件读写文件、网络请求、键盘输入、休眠、等待其他进程信号。核心特点不占用 CPU、不参与调度。终止状态进程代码执行完毕 / 异常退出系统回收它占用的内存、文件等所有资源清除 PCB进程彻底消失。状态流转最简逻辑新建 → 就绪初始化完成进入排队就绪 → 运行CPU 调度选中分配时间片运行 → 就绪时间片耗尽被迫让出 CPU运行 → 阻塞主动等 IO / 事件主动放弃 CPU阻塞 → 就绪等待事件完成重新排队运行 → 终止程序跑完进程结束下面是进程五态流转的 Mermaid 流程图直观展示各状态之间的转换关系初始化完成进入排队CPU 调度选中分配时间片时间片耗尽被迫让出 CPU主动等 IO / 事件主动放弃 CPU等待事件完成重新排队程序跑完进程结束新建状态就绪状态运行状态阻塞状态终止状态易混点就绪、阻塞都不用 CPU只有运行占用 CPU只有运行态能主动进入阻塞态阻塞态不能直接回到运行态必须先回就绪态1.2 线程进程内部执行分支轻量级执行流共享所属进程全部资源内存、全局变量、文件等无独立资源只独有栈、寄存器、程序计数器轻量创建切换速度极快关系进程五大状态下线程分别在做什么先记住核心进程是整体容器线程是容器里真正干活的执行者进程切换状态 整个容器状态变了里面所有线程跟着同步变动进程【新建状态】进程刚创建、分配内存、初始化 PCB线程还未创建只有空进程壳子没有执行流无事可做进程【就绪状态】进程资源齐全排队等 CPU 时间片线程同进程内所有线程全部进入就绪排队线程已经准备好代码、栈、寄存器只差 CPU 调度整体待命不执行任何代码不占用 CPU进程【运行状态】进程拿到 CPU正式运行线程OS 操作系统按调度规则选中一个 / 多个线程占用 CPU 执行单核同一时刻只有一条线程在跑其余线程挂起等待多核多条线程并行同时执行线程轮流使用时间片完成业务逻辑进程【阻塞状态】最重点进程主动放弃 CPU等待 IO、输入、休眠、网络等事件线程触发阻塞的那条线程直接暂停休眠同进程内所有线程全部跟着停止运行整个进程脱离 CPU 调度里面所有线程全都躺平等待区别线程阻塞 连累整个进程一起阻塞举例主线程等待键盘输入 → 整个进程卡死子线程也不动进程【终止状态】进程结束、资源回收、销毁 PCB线程进程一旦终止进程内所有线程全部强制销毁不分主次线程全部直接结束无法继续运行1.3 核心区别资源归属进程资源独立互不共享内存空间、文件句柄等。线程同进程内共享进程资源堆、全局变量、文件描述符等仅独有栈和寄存器。开销与切换进程创建、销毁、切换开销大需要系统重新分配和回收资源。线程创建、销毁、切换开销小同一进程内线程切换只需保存/恢复少量寄存器。通信方式进程进程间通信IPC复杂需借助管道、消息队列、共享内存、信号量等机制。线程同一进程内线程可直接读写共享变量通信简单但需处理同步与互斥问题。安全性进程相互隔离一个进程崩溃不影响其他进程安全性高。线程一个线程崩溃如非法内存访问可能导致整个进程崩溃安全性较低。调度级别进程独立调度单元线程操作系统真正 CPU 调度最小单位二、操作系统中的任务前面已经对进程和线程进行了整理和归纳那么就由此引出了进程和线程实际作用那就是为了完成任务那么接下来就是对任务进行一下归纳和整理2.1 什么是任务任务 系统中需要完成的一件独立工作、一件事是逻辑层面的叫法最笼统、最宽泛。例子你想让电脑干一件事这件事就叫任务。例子播放音乐 一个任务聊天发消息 一个任务下载文件 一个任务打开浏览器 一个任务2.2 与进程、线程的关系逻辑层任务抽象概念指要做的事情不分大小只看目标。无资源、无状态、不占内存只是需求。↓资源层进程承载任务的容器为了完成某个任务系统创建的资源容器。分配内存、PID、文件资源负责把任务跑起来。↓执行层线程真正干活的执行者进程内部执行单元真正跑代码、完成任务细节。一个任务复杂就开多线程分头干活。简述一个任务 → 交给一个进程去承载 → 进程开多条线程并发完成拓展并发单核 CPU快速轮流切换线程看起来同时跑并行多核 CPU同一时刻真正同时运行多个线程 / 进程三、操作系统中的调度3.1调度核心概念调度定义操作系统按照一定规则把CPU 时间片分配给就绪队列里的进程 / 线程决定谁先用 CPU、用多久。调度目的提高 CPU 利用率、缩短等待时间、保证公平、兼顾紧急任务。调度单位早期进程调度现在主流线程调度CPU 最小调度单位调度时机时间片用完、进程阻塞、进程终止、中断到来3.2 调度三大层级由高到低高级调度作业调度从外存把程序调入内存创建进程进入就绪队列。负责选任务进内存中级调度内存调度内存不足时把暂时不用的进程挂起放到外存腾出空间。负责内存扩容、换入换出低级调度进程 / 线程调度最频繁、最核心就绪队列选进程 / 线程占用 CPU。负责真正分配 CPU日常说的调度就是它3.3 调度方式两大分类非抢占式调度进程拿到 CPU 后主动放弃才让出时间片没用完、不阻塞就一直占用优点简单、系统开销小缺点紧急任务无法插队响应慢抢占式调度现代系统全用这个高优先级任务 / 时间片到强行抢走 CPU优先级高、短任务优先插队优点响应快、实时性强缺点切换频繁系统开销略大Windows、Linux、安卓、iOS 全是抢占式3.4 调度相关核心问题饥饿现象低优先级 / 长任务一直得不到 CPU长期无法执行。解决优先级动态提升、老化机制。进程切换上下文切换切换 CPU 执行任务时保存旧线程寄存器、栈、程序计数器加载新线程数据。开销耗时间、耗性能切换不能太频繁并发与调度关系单核 CPU 靠时间片轮转调度实现宏观并发多核 CPU 调度可实现真正并行阻塞与调度关系进程进入阻塞态主动放弃 CPU调度器直接跳过它调度就绪队列其他任务。线程调度特点同一进程内线程共享资源切换开销远小于进程一个线程阻塞同进程其余线程无法被调度执行主线程优先级普遍高于子线程总结本文从进程和线程的基本概念出发详细梳理了进程的五态模型及线程在各状态下的行为并对比了二者的核心区别。随后我们引入了“任务”这一抽象概念理清了任务、进程、线程三者之间的逻辑关系。最后深入探讨了操作系统的调度机制包括调度层级、方式及饥饿、上下文切换等核心问题。掌握这些基础是理解并发编程、性能优化和操作系统原理的关键。建议读者结合代码实践如 Java 多线程、Python 多进程加深理解并关注死锁、活锁、竞态条件等进阶话题。