Linux进程调度:系统调用、优先级与处理器亲和性解析
1. sched_yield() 系统调用
Linux 作为一个抢占式多任务操作系统,提供了 sched_yield() 系统调用,允许进程显式放弃执行权,让调度器选择新的进程执行。
#include <sched.h>
int sched_yield (void);
调用 sched_yield() 会暂停当前运行的进程,之后调度器会选择新的进程运行,就好像内核主动抢占当前进程一样。若没有其他可运行的进程,放弃执行权的进程会立即恢复执行。该调用成功时返回 0,失败时返回 -1 并设置 errno 。在 Linux 及大多数 Unix 系统中, sched_yield() 不会失败,总是返回 0,但严谨的程序员仍会检查返回值:
if (sched_yield ( ))
perror ("sched_yield");
1.1 合理使用场景
在 Linux 这样的抢占式多任务系统中, sched_yield() 的合理使用场景较少。内核能做出最优、最高效的调度决策,比单个应用程序更适合决定何时抢占和抢占哪个进程。不过,在以下情况中仍有一定作用:
- 等待外部事件 :例如一个进程需要等待另一个进程完成,可使用
超级会员免费看
订阅专栏 解锁全文
6986

被折叠的 条评论
为什么被折叠?



