计算机系统学习之(2):MultiProgramming,MultiProcessing,MultiThread 的区别(多程序,多进程,多线程的区别)

本文深入探讨了多程序、多进程和多线程的概念,解释了它们如何实现并发执行。多程序在单核CPU上通过时间片轮转模拟并发,而多进程在多核CPU上实现真正并发。多线程则是在同一进程中创建多个执行线程,共享资源,提高效率。理解这些概念有助于更好地优化系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 首先引用 IBM 给出的定义
    在这里插入图片描述

https://www.ibm.com/docs/en/ztpf/1.1.0.15?topic=processing-multiprocessing-multiprogramming

  • 要知道的是,一个 CPU 的核代表的就是 CPU 在某个时刻只能处理一个 process;而多核 CPU 代表的就是某个时刻能同时处理多个 process, 即: Multiprocess。
  • 而无论单核还是多核的 CPU 其实都能实现 “看起来”同时运行多个程序;只不过我们在 Multiprogram 的场景中着重强调 “单核CPU” 是为了突出 “就算只有一个核,也照样可以看起来同时运行多个程序(program)”

多程序 MultiProgramming

  • 从上文内容中可以看出来,Multiprogramming 强调的场景是,当只有一个 CPU 的时候,可以运行多个程序 program 让整个系统看起来是并发的;而其实一个 CPU 并不能够完成真正的并发,所谓的多个 program 同时运行也不过是 CPU 在不同任务之间轮转的表象。
  • 就算是一个 program 同一个 stage 的两个部分,也只能转成顺序的方式一先一后地执行。

多进程 MultiProcessing

  • Multiprocessing 强调的场景则是至少两个 CPU(或者多个 CPU),在这种情况下是真真正正的多个 CPU 同时并发地工作,虽然每个 CPU 可能依然负责在多个任务之间轮转,但是对于系统来说,现在是真的并发执行了(而不是伪并发),因为可以在同一个时刻处理两个甚至多个任务了。
  • 对于一个 program 同一个 stage 的两个部分,我可以并行的放在两个 CPU 上来完成,因此一个 program 的同一个 stage 的事务可以同时被解决完成,真正意义上提高了效率。

可能上面的例子还是不够直观,我们再举一个更加具象的例子:

  • 假设你要对 2 个表格 A,B 进行数据统计,每一秒钟在屏幕上分别打印 A, B 的阶段性的统计结果。
  • 但是现在只有一个单核 CPU,虽然你可以同时运行这两个表格的统计程序,但是!!!! CPU 只能通过时间片在这两个表格之间跳来跳去计算结果,如果你真的可以在某个时刻停住时间,你会发现 CPU 正停在 A 或者 B 中的某一行,而不可能真正同时处理 A,B 中的数据,但对于你来说,你只是每秒钟看到屏幕上 A, B 的数据都源源不断地被统计出来,看起来好像 A,B 在同时执行,这个就是 MultiProgramming。
  • 现在你财力大增,购入了一块双核的 CPU, 你依然运行这两个程序,当你在某个时刻停住时间,你会发现两个核分别停在 A 和 B 的某行数据上,当然也有可能两个核都停留在 A 的数据上或者 B 的数据上,但是一定是不同的两行,这不重要。重要的是,某个时刻确实有两行数据被解决了,这才是真正的并发!

多线程 MultiThread

  • 通常来说 Multiprogramming 和 Multiprocessing 容易混淆是因为大家常常不明白为什么强调 Multiprogramming 的时候老是要强调 single core 或者 single CPU;而 Multiprocessing 和 MultiThread 之所以容易弄混,是因为大家可能不明白 Thread 和 process 的层级关系

  • 简单来说,thread 就是个小 process,一个 process 里面可以有多个 thread 而 thread 的创建和销毁比 process 容易的多。

  • 这是因为 process 是系统分配资源的最小单位:只有创建 process 的时候,系统才会给 process 分配资源,换句话说:thread 的创建是对一个 process 的资源进行利用,thread 的创建并不归系统管也不会给 thread 分配资源。而 thread 是调度 CPU 的最小单位,即他也有调度 CPU 时间的权力。

  • 举个不恰当的例子,有一个村,村里 100 亩地,村长有个秘书叫 CPU 负责挨家挨户解决问题,村长(系统)跟村里的每户居民分配了 10亩地(系统给进程分配资源)并跟每家的家长(进程)说:“你们生多少孩子我不管,反正你们就这 10亩地,多了一滴也没有”。张三(进程)家里生了 3 个孩子(Thread),他家的小儿子天天跑去找秘书(CPU)麻烦,今天让 CPU 教他吹口琴,明天让 CPU 帮他牵羊。。。这个例子说明:虽然系统分配资源给进程,但是线程依然可以调度 CPU.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值