【问题标题】:Forcing a context switch from the userland on Linux?在 Linux 上强制从用户态进行上下文切换?
【发布时间】:2012-04-28 11:10:31
【问题描述】:

是否可以建议内核立即执行上下文切换到不同的线程,绕过调度程序逻辑?

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

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

【问题讨论】:

  • 如果你真的不需要线程立即运行,那么你应该给它一个实时优先级,让内核来处理它。 (但你可能不会……你能说出你为什么想要这个吗?)

标签: linux scheduling


【解决方案1】:

您不应该尝试控制上下文切换,因为内核可能比您更清楚何时执行此操作。特别是因为上下文切换被认为是一项代价高昂的操作(主要是由于缓存失效)。

但是,如果你真的需要强制一个调度器循环,你可以使用the sched_yield() system call

【讨论】:

  • sched_yield 只会强制当前线程离开 CPU,不能保证下一个要运行的线程是 OP 想要运行的线程。
  • @Job,虽然我同意你的说法,但如果 OP 正在开发的进程是该计算机上运行的主进程,那么切换到其他线程的可能性不大......
  • 如果你使用 pthread 库,还有pthread_yield() 函数(在Linux 上调用sched_yield()。)
  • 我认为我有正当理由想要这个:在进行时序测量时,结果发现异常的可能性(即执行测试 sn-p 的时间延长 30%)与在同一个紧密循环中进行测量。在每次测量后强制进行上下文切换应该解耦这些相关性。因此,“你不应该试图控制开关”的说法是错误的(它太强了,似乎总是应用,就像它所说的那样)。您可以在其中添加“可能”一词(“您可能不应该......”)。或者添加“除非你知道自己在做什么,否则你不应该……”
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2014-11-24
  • 2011-07-23
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多