目录
你有没有想过为什么,你的电脑可以一边放音乐,一边让你打字,还能后台下载文件?它真的在同时做这么多事吗?
把电脑比作一个大工厂,操作系统是厂长,而“进程”和“线程”就是工厂里的工人,分工协作完成任务。
那么,操作系统,线程,进程分别是什么呢?接着走下去吧。
一、操作系统
操作系统(Operation System,简称OS)是计算机系统的核心软件,它管理计算机硬件和资源资源,并为用户和应用程序提供一个统一的接口和服务。
简单来说,操作系统是一个大管家,负责管理电脑的硬件(CPU、内存、硬盘等)和协调所有软件的工作
补充一下软件和硬件的定义,也算是给自己一些拓展:
- 软件,是计算机系统的逻辑部分,由一系列指令和数据组成,用于指导硬件执行特定的任务。软件是”看不见、摸不着“的,但是可以通过硬件来执行
- 硬件,是计算机系统的物理部分,由电子和机械设备组成。它是计算机的基础设施,负责执行软件指令并处理数据。硬件是”看得见、摸得着“的物理设备
操作系统通过驱动程序,间接地管理硬件设备。而对于所有的硬件设备都是这样,系统通常会内置一些通用的驱动程序。同时,操作系统也给各种应用,提供一个稳定的运行程序,这些应用程序,工作过程中,互不干扰。
还是以厂长为例,操作系统就像是厂长,指挥工人如何分配机器资源,调节生产速度,避免工人打架抢工具。
一句话总结:没有操作系统,电脑就像是一堆废铁,啥也干不了!
二、进程:一个独立的小工厂
一个运行起来的程序,就可以称为进程(Process)。
- 每个进程就像是一个独立的小工厂,负责完成一个任务(比如运行微信,打开浏览器)。
- 每个小工厂都有自己的车间(内存空间),互不干扰
现在的计算机同时跑个百来十个进程,很常见。而操作系统就需要能够很好地管理上述进程。
生活中的例子:比如现在是在一边听音乐一边看着博客,播放音乐的工厂和看博客的工厂,他们的工具(资源)分开存放,避免冲突
管理进程
站在操作系统的视角,如何管理进程
1.先描述一个进程是什么样的
- 使用结构体,描述进程的核心属性
- 同时也会使用进程控制块(PCB),非常大的结构体,有很多属性
2.再把多个进程组织起来
比如,像是Linux这样的操作系统,使用链表(不一定是一个链表)这样的形式,把多个PCB串到一起。
三、线程:工厂里的工人小队
通过多进程编程的方式,可以实现“并发编程”效果。但进程是一个比较“重”的概念,创建进程、销毁进程的开销比较大,尤其是频繁的进程销毁。
为了应对上面的问题,引入了线程(Thread),轻量级进程。
- 一个进程里(小工厂)里有多个线程(工人小队),共同完成更高效的任务。
- 工人小队共享车间资源(同一个进程的内存),能够快速协作。
进程包含线程,每个进程重,都会包含一个或多个线程。不过下面这张图里看不到线程,只是正在运行的程序和系统进程。
进程是操作系统资源分配的基本单位:
- 对于线程来说,只要第一个线程创建的时候(和进程一起创建的时候)申请资源,后续在创建线程,不涉及资源申请操作(干的事更少,就更快)。
- 只有所有的线程都销毁(进程销毁)才真正释放资源,运行过程重销毁某个线程,也不会释放资源。
- 进程和线程之间,所涉及到的资源则是各自独立的,彼此之间互不干扰。
生活中的例子
- 浏览器开多个标签页:一个工厂(浏览器进程)里,工人1加载网页,工人2播放视频。
- 游戏运行时:一个线程负责画面渲染,另一个线程处理键盘操作。
小问题:电脑死机时,厂长(操作系统)最可能让哪个工人背锅?
A、最安静的工人(比如系统后台的“空闲进程”)
B. 穿得最花哨的工人(比如桌面壁纸软件)
C. 最贪吃的工人(疯狂占用CPU和内存的进程)
答案在博客最后。
四、进程与线程的区别和联系
特点 | 进程 | 线程 |
资源占用 | 独立内存,占用多资源 | 共享内存,资源消耗小 |
切换速度 | 慢(搬家效率低) | 快(同一车间协作快) |
容错性 | 崩溃不影响其他进程 | 崩溃会搞垮整个工厂 |
五、多任务/多线程
单任务的痛苦
早年电脑(如DOS系统)”单任务“操作系统,同一时刻,只能进行一个进程,想要进行下一个进程,就得结束上一个进程。
试想一下,我要和女朋友聊天,就不能跳转到其他页面(像是去Word里打字),否则就收不到消息。效率低下,无法满足人类多任务操作的自然需求。
多任务的技巧
CPU时间片是电脑唯一的“双手”,无法真正同时做两件事。
CPU时间片的定义:
CPU时间片是操作系统分配给进程/线程使用CPU的时间段,用来在多个任务之间公平分配合法抢答权。
它像是食堂排队时每个人只能打饭10s,轮到你时才能用CPU,超时就被强制换人 。
其实也引出了实现多任务的关键技巧:分时复用。
- 把一个单位时间分成很多份,第一份运行进程1的指令,第二份进行进程2的指令……
- CPU运行的速度足够快,上述的切换过程,也会非常快,超出人类的反应时间,让人感觉起来好像这些进程像是在“同时执行”一样。
- 在一个CPU核心上,按照分时复用,执行多个进程这样的方式,称为“并发执行”。
- 多个CPU核心上,同时执行多个进程这样的方式,称为“并行执行”,也确实是“同时执行”。
- 现代CPU在运行这些进程的时候,并行和并发是同时存在的。
多线程的意义
如果一个工厂只能一个工人干活(单线程),下载文件时就会卡住不懂,能把我急得没脾气。
像是客户端 b站 视频播放 和 弹幕滚动就是使用了多线程。
六、总结
本文中,通过工厂的类比了解操作系统,进程和线程以及它们之间的关系。理解了线程和进程,我们能够指导电脑卡顿的元凶——可能时某个小工厂(进程)在疯狂加班。
小问题的答案是:C. 最贪吃的工人(疯狂占用CPU和内存的进程)
死机通常是因为某个进程(贪吃的工人)过度消耗资源(CPU爆满或内存不足),导致操作系统无法调度其他任务。
A(最安静的工人):
空闲进程其实不会占用资源,厂长反而会优先让其他工人使用资源
B(穿得最花哨的工人)
桌面美化工具虽然外观“花哨”,但如果占用资源合理,并不会导致死机。
补充:操作系统和CPU的关系
核心组件 | 操作系统(OS) | CPU |
身份定位 | 资源经理:管理硬件、调度任务的软件 | 执行者:执行指令和计算的硬件芯片 |
核心功能 | 分配内存、硬盘、CPU时间片,防止程序“打架” | 快速运算(加法、逻辑判断、数据移动) |
协作核心 | 指挥CPU干活 | 只听OS指挥 |