咋理解std::this_thread::yield
比如说你的线程需要等待某个操作完成,如果你直接用一个循环不断判断这个操作是否完成就会使得这个线程占满CPU时间,这会造成资源浪费。这时候你可以判断一次操作是否完成,如果没有完成就调用yield交出时间片,过一会儿再来判断是否完成,这样这个线程占用CPU时间会大大减少。举例:while(!isDone()); // Badwhile(!isDone()) yield(); // Good
■网友
【咋理解std::this_thread::yield】 告诉内核的调度器如果有其他进程/线程等待在这个CPU上运行,则把CPU让给那些进程,即主动把时间片让出去,但如果本CPU上只有我一个人在运行,没有其他人在等待运行,则调度器还是会选中我来运行,也就是比较gentle的一个出让CPU。
如果不执行yield,则如果其他人有运行需求,则我一直尝试占着CPU运行,会导致他们的响应时延变大(等到一个调度时间片后其他进程才有机会运行,现在我yield了他们马上就能运行)。但如果没有其他人有需求,我可以一直占着CPU(但是在过程中执行yield检查是否有其他人有运行需求)。
和睡眠的区别是睡眠必然等到指定时间后才重新调度我运行,但yield只在其他人有运行需求的情况下才出让。
■网友
yield让出时间片,但是cpu占用率似乎并不会下降。
所以while(1)最好的方式似乎还是事件驱动。
推荐阅读
- 学图像处理有哪些不错的书推荐
- 应该怎样理解会员服务的法律性质
- 读书读到3分之一的时候感觉很难理解,要不要继续
- 怎样简洁到位地让外国人理解中文互联网文化中的「屌丝」、「喷子」、「五毛」、「水军」、「公知」等词
- ActiveMQ、MQTT的方式进行Android消息推送,我的理解是否正确
- 讲座|启东系统培训帮助老师和家长更好理解孩子
- 设计师应该咋快速理解程序,我很想学好程序,但没咋理解程序是咋实现的,大部分教程都是教写的过程
- 复习|七年级英语期末阅读理解专项复习5篇及答案解析
- javascript 中this的四种调用模式
- 图像的傅里叶变换的理解问题
