在Linux上如何从用户空间强制进行上下文切换?

4

是否可能建议内核立即切换到不同的线程,跳过调度器逻辑?

例如,如果我刚刚使用clone创建了一个线程/进程,并且希望立即开始执行它,立即放弃当前上下文,而不是等待内核重新安排任务的下一次时间。

理想情况下,我正在寻找与Mach内核上的thread_switch调用完全相同的东西。


3
如果你真的需要线程立即运行,那么你应该将其设置为实时优先级,并让内核来处理它。(但是你可能并不需要...你能说出为什么需要吗?) - andersoj
1个回答

1

你不应该试图控制上下文切换,因为内核很可能比你更清楚何时进行上下文切换。特别是由于缓存失效等原因,上下文切换被认为是一项昂贵的操作。

但是,如果你真的需要强制进行调度周期,可以使用sched_yield()系统调用


5
sched_yield只会强制当前线程离开CPU,没有保证下一个要运行的线程是原帖作者想要运行的线程。 - mtvec
@Job,虽然我同意你的说法,但如果OP正在开发的进程是计算机上运行的主要进程,那么切换到另一个线程并不是不可能的。 - Alexis Wilke
1
如果您正在使用pthread库,则也有pthread_yield()函数(在Linux上调用sched_yield())。 - Alexis Wilke
2
我认为我有一个合理的理由想要这样做:在进行计时测量时,发现异常情况(即执行测试片段所需时间增加30%)的机会与同一紧密循环中的测量结果密切相关。每次测量后强制进行上下文切换应该可以解除这些相关性。因此,“你不应该试图控制开关”的说法是错误的(它太强烈了,似乎总是适用于所述方式)。你可以在其中添加“可能”这个词(“你可能不应该...”)。或者添加“除非你知道自己在做什么,否则你不应该...”。 - Carlo Wood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接