cpu占用率问题

来源:7-3 线程同步之自旋锁

evahere

2019-10-02

消费者sleep(10)的过程中,生产者会持续霸占着cpu,top命令是看到接近100%的。
不是很理解这里,场景1:
1、这是一个多核cpu,消费者对资源进行自旋锁加锁操作到解锁这一段过程中,它是不是也需要一个cpu来工作?同时生产者在等待锁的解开也会霸占着一个cpu?
2、如果是这样的话 为什么cpu占用率会差不多100%,这里的top命令查看的是单个cpu的利用率吗(生产者霸占的那个cpu)?
3、如果top命令查看的cpu是所有核数总的利用率,那生产者都已经霸占了几乎100%,消费者那边怎么办(它还没工作完)?好模糊,请老师解释一下

场景2:
1、单核cpu,不知道有没有理解错:单核cpu模拟出来的多个线程,线程A用于消费者,线程B用于生产者。消费者sleep(10)过程中,线程B霸占了唯一的那个cpu,线程A获取不到cpu不能完成消费者的任务,所以会一直卡死。(这就是自旋锁不适用单核cpu的原因吗?)

问题有点多麻烦老师解释一下哈谢谢

写回答

1回答

咚咚呛

2019-10-02

问题挺细,突然觉得慕课网的问答区也是非常好的,也可以帮助同学们解决这么细致的疑问。

  1. 加锁操作和等待解锁的操作需要CPU去执行,但是不会一直占用CPU,事实上,他们是通过其他机制去实现解锁操作的,我们称为通知机制,当sleep完成以后,操作系统会发出信号通知等待的生产者,生产者得到通知以后再去处理,不需要一直霸占CPU。

  2. 是的,当一个核被完全占满就是100%,如果有四个核,每个核都跑满的话,CPU的利用率就是400%。

  3. 和1一样,是通过通知机制去处理的,不会一直霸占。

  4. 这里有一句话说的很对,就是单核CPU模拟出多个线程,这个也是操作系统篇老师所介绍的操作系统的虚拟性,当一个线程卡住的时候,这个线程可以先调度出CPU,让其他CPU去执行。这里可以结合之前的内容重新理解一下。

0
6
慕码人1411241
回复
咚咚呛
明白了,谢谢老师
2020-10-18
共6条回复

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7662 学习 · 1571 问题

查看课程