OpenBSD 线程优先级

OpenBSD 线程优先级

谁能解释一下如何在 OpenBSD 中使用线程优先级?

MAN 页面中有关此问题的信息很少,没有给出清晰的理解。尤其:

sched_get_priority_min/max给出范围。我有 OpenBSD 6.3 amd64,范围是0-31.

如果我看到第一个创建的进程线程的默认优先级策略/级别,我会看到:(SCHED_OTHER, 0)。如果0是最低的,我如何指定空闲线程?或者优先级低于正常?我可以只增加优先事项?系统线程有哪些优先级?根据想法,默认优先级必须是normal

手册页pthread_setschedparam()说:“线程的调度策略可以是SCHED_FIFO(先进先出)或SCHED_RR(循环)”。为什么不SCHED_OTHER?第一个默认线程有政策。

这些优先级是实时的还是正常的?

有人能说清楚吗?

在Windows中,我可以设置idle优先级,并且我看到只有当系统中没有其他工作时才会调度该线程。我可以设置time_critical,并且该线程几乎拥有所有处理器时间。

如何在 OpenBSD 中解决这些任务? Windows 优先级的类似物有哪些:idlelowestbelow_normalnormalabove_normalhighesttime_critical

政策如何选择?FIFOOTHER或者RR?当优先级相同时,这些策略在授予处理时间方面是否相同?

MAN 页面中有很多没有答案的问题。

答案1

unistd.hOpenBSD 上,两者_POSIX_PRIORITY_SCHEDULING_POSIX_THREAD_PRIORITY_SCHEDULING设置为-1,表示不支持进程调度和线程执行调度选项(也不支持运行时,因为sysconf功能显示)。

这意味着OpenBSD实现不支持基于设置的优先级进行调度,因此所有设置的优先级pthread_setschedparam都是没有意义的。事实上,源头pthread_setschedparamEINVAL确实也表明了是否应该返回基于优先级的调度策略的疑问。

因此,回答您的第一个问题:目前您无法在 OpenBSD 中使用线程优先级,因为这不受支持。

相关内容