普通PC的CPU只有几个核心,是怎么对付成百上千个线程的

问题引入

点开任务管理器,打开这个面板,你绝对会吓一跳

在这里插入图片描述
逻辑处理器和核心数这两个参数,分明只有 8 个和 4 个呀,左边这里有 2644 个线程,怎么应付的过来啊?

分析

这的确是个好问题,一个人就算再能打,面对成百上千的敌人,也不好对付吧?

难道这个真的有这么强吗?

CPU的参数列表

先随便找个 CPU 的参数来看看
在这里插入图片描述
这里明明写的是 12 线程啊,怎么回事

  1. 确实,CPU 里面有的物理核心数就那么多
  2. 不过,这个问题不用太担心,因为他下面有个好兄弟帮他

你被操作系统操作了

CPU 的好兄弟就是他,操作系统

操作系统里面有一个很重要的东西,叫做虚拟化,CS 的课程中,肯定会讲这个东西

虚拟化可以分为两种:

  1. 内存虚拟化
  2. CPU 虚拟化

这里就只提 CPU 的虚拟化

为什么需要虚拟化?

CPU 的资源是有限的,而在操作系统中,各种各样的程序都在向操作系统索要资源,所以,必须想出个对策来,怎么用有限的资源去应对各种各样的需求

所以,虚拟化这种理论就被提出来,并且应用了

原来是这么回事

在操作系统中,程序有以下三个状态

  1. 就绪
  2. 运行
  3. 挂起

在这里插入图片描述

操作系统是实现虚拟化的呢?

这里需要引入一个新概念:CPU 时钟

这个是 CPU 内部用来计算时间的标准,现实世界中,我们可以看到的是 h,min,second 这些计时单位,而 CPU 中,有专门的的单位用来计算时间,这个单位特别小(相对于现实中的时间)

操作系统是这么做的:

  1. 根据系统自己指定的策略,当一个程序可以运行的时候,将他从就绪态转入运行态,然后,程序可以开始跑,就是 上图中的 (1)
  2. 当经历了一个 CPU 时钟的时间长度后,如果这个程序没有执行完,让他回到就绪态(2),如果执行完了,让他跑向挂起态(3)
  3. 当一个程序准备东山再起的时候,让他从挂起态变成就绪态(4)

程序没有执行完,就让他停下来,什么时候能继续执行呢?

这个就需要根据每个操作系统里面的策略不同(这就是操作系统的调度),进行具体的分析了

诶? 程序们像这样还没运行完就突然停下来,为什么我在使用计算机的时候察觉不到?

CPU 时钟的长度很短,现实世界中都是用毫秒,微秒这种级别的单位来衡量的,而在你察觉他开始卡顿之前,他已经进入了下一个 CPU 时钟内继续执行了,你肯定发觉不了啊

但实际上程序的执行步骤是:

  1. 执行
  2. 暂停
  3. 继续执行
  4. 暂停
    ………………

总结

所以,在底层的世界里,操作系统将 CPU 有限的资源通过 CPU 时钟,将这些资源划分成很多个小块,造成一种资源非常丰富的错觉,让每个程序都认为他拥有充足的 CPU 资源去运行程序,而不是认为当前的资源不够,就罢工

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值