【问题标题】:Scheduling threads within a process在进程中调度线程
【发布时间】:2012-08-16 05:42:09
【问题描述】:

假设我有一个有 4 个线程的进程,我希望它们根据特定的调度算法运行。我搜索并找到了用于选择算法和设置线程优先级的pthread_setschedparamsched_setschedparam 函数,但我看到了一件不清楚的事情——pthread_setschedparam 采用线程名称并设置它自己的调度策略。这具体是什么意思,因为我认为一个进程中的所有线程都是根据一个策略调度的,该策略是为整个进程设置的。 这是否意味着如果我使用sched_setschedparam 并设置一个策略(因为它通过它的 PID 引用一个进程),它将确保该进程中的线程根据选定的调度策略运行?

我正在编写的代码是为 Linux 编写的,我使用的是 boost,但是这部分不得不求助于 pthread。

【问题讨论】:

  • 内核调度程序正在管理系统上运行的所有任务(即进程或线程)。您不能绝对确定不会安排其他任务(有时它们需要运行)。您可以研究所谓的实时进程调度。

标签: c++ linux pthreads scheduling


【解决方案1】:

pthread_setschedparam 设置单个线程的调度参数。 sched_setscheduler 设置整个进程的调度参数。不同的线程确实可以有不同的调度策略。

【讨论】:

  • 感谢您的澄清,所以我需要做的就是通过调用 pthread_setschedparam 单独设置每个线程的策略
  • @Aerol:或者您只能设置 first 线程策略并设置“继承”标志,这使得从该线程生成的所有线程都具有相同的策略。我不知道 "sched_" 和 "thread_" 函数是如何交互的,但你总是可以做一个小测试用例并尝试(使用thread_getschedparam 函数查询当前状态)。
  • 我就是这样做的,我已经为创建所有其他线程的线程设置了策略,然后它们会继承它。无论我使用pthread_setschedparam 还是sched_setscheduler 设置它,它们都从主线程继承策略。我还尝试(查看在线程上调用“sched_”的效果)在线程已经运行时使用sched_setscheduler更改进程的策略和优先级,并在之后使用pthread_getschedparam检查它们的策略,它们不受它的影响
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多