咋理解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)最好的方式似乎还是事件驱动。


    推荐阅读