cpu调度的最小单位_为什么说线程是CPU调度的基本单位?

点击上方“Python编程时光”,选择“加为星标”

第一时间关注Python技术干货!

0ce7d7b3692c886fd7db7ffe8f29597c.png

原文: https://dwz.cn/V9ukPOOE

在大学操作系统的课本中,一般会有那么一句话:线程是CPU调度的基本单位。但是课本很少会去解释为什么。这里我简单说一下哈。因为寄存器中保存了当前线程的状态,例如一些栈指针呀,程序计数器呀。

但是这种答案好像并没有解释为什么要让线程是CPU调度的基本单位,这只是告诉了我们一个结果说线程是CPU调度的基本单位。因为我们还有进程这个概念呀,为什么不让进程成为CPU调度的基本单位呢?

这里我从设计的角度给出一个可能的原因。

首先我们要知道什么算作CPU调度,也就是拥有时间片对吧。OK,我们也知道一个进程是可以有多个线程的对吧。

现在我们假设我们的计算机是单 CPU 4核。此时,我们的进程中的4个线程占据了CPU的所有核。因为任务不同,所以这些线程执行的时间也不同。

如果这个进程中的某个线程已经完成了自己的任务,那么这个完成了任务的线程所占据的那个CPU核就处于空闲的状态了对吧。OK,此时我们的操作系统有两种设计方式:
1、以进程为CPU的调度单位
2、以线程为CPU的调度单位

假如是第一种设计方式,因为这个进程中还有另外3个线程在执行任务,所以因为一个线程执行完了而把当前进程切换掉,显然是很不明智的。那么,如果不切换进程,而去等待另外3个线程执行完任务的话,那么肯定会有CPU的某个或者某些核处于空闲的状态,此时没有充分利用好硬件。
因此,如果以进程为CPU的调度单位,在面对上面这种情况的时候,显得很无力。

OK,假如是第二种设计方式,就可以很好地解决这个问题了。操作系统把所有的线程一视同仁,我不管你这个线程是属于哪个进程的,只要你任务完成或者时间片用完,我就切换掉你,换一个线程过来。至于这个换过来的线程是同一个进程的线程还是其他进程的线程我不管,因为我是以线程为调度单位的。显然,第二种方式能够充分利用好CPU的所有核,不至于让某些核无所事事。

7bd704eb035c45533b53732369b5f49a.png

推荐阅读

字符串在Python内部是如何省内存的

整理了 11 个好用的代码质量审核和管理工具

让Python中类的属性具有惰性求值的能力

【神技巧】巧用 traceback 定位 Python 内存泄漏

太强了!Python中完美的日志解决方案

如何使用 Python 操作 Git 代码?

64c7473359bc474779d66a4600c608d0.png

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值