如何解决在现代/抢占式调度程序下运行时,是否有正当理由调用 pthread_yield()?
pthread_yield 被记录为“导致调用线程放弃 cpu”,但在现代操作系统/调度程序上,cpu 的放弃会在适当的时间自动发生(即每当线程调用阻塞操作时,和/或当线程的量程已过期时)。 pthread_yield()
因此是否残留/无用,除非在仅合作的任务调度程序下运行的特殊情况?或者是否有一些用例即使在现代抢占式调度程序下调用它仍然是正确/有用的?
解决方法
pthread_yield()
让您有机会进行短暂的睡眠——而不是定时睡眠。您将剩余的时间片交给其他某个线程或进程,但您没有将该线程放入等待队列。
不久前,我阅读了有关调度程序如何优先考虑交互进程的文章。这些是用户直接与之交互的进程,您最能感受到它们的缓慢(如果您的 UI 响应迅速,您就不会觉得系统很慢)。交互式过程的特性之一是它们几乎没有什么可做的,而且大多不使用整个时间片。因此,如果一个进程在其时间片结束之前一直让步,则您认为它是交互式的,并提高其优先级。有些漏洞利用此技巧有效地使用了 99% 的 CPU,同时将违规进程显示为 0%。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。