c-在现代/先发制人的调度程序下运行时,是否有正当理由调用pthread_yield()



pthread_yield被记录为";使调用线程放弃CPU";,但在现代OS/调度程序上,CPU的放弃在适当的时间自动发生(即,每当线程调用阻塞操作时,和/或当线程的数量到期时(。因此,除了在仅合作的任务调度程序下运行的特殊情况外,pthread_yield()是否是残余的/无用的?或者在某些用例中,即使在现代先发制人的调度器下,调用它仍然是正确/有用的?

pthread_yield()给你一个短暂睡眠的机会,而不是定时睡眠。您将剩余的时间片交给其他线程或进程,但不会将线程放入等待队列。

不久前,我还读到关于调度器如何对交互式进程进行优先级排序的文章。这些是用户直接与之交互的过程,你最能感受到它们的迟缓(如果你的UI响应灵敏,你就不会有系统缓慢的感觉(。交互式过程的一个特性是,它们几乎没有什么可做的,而且大多不使用整个时间片。因此,如果一个过程在时间片结束之前一直在让步,那么你就认为它是交互式的,并提高了它的优先级。有一些漏洞利用了这个技巧,有效地使用了99%的CPU,同时将有问题的进程显示为0%。

最新更新