谁能解释一下如何在 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 优先级的类似物有哪些:idle
、lowest
、below_normal
、normal
、above_normal
、highest
、time_critical
?
政策如何选择?FIFO
,OTHER
或者RR
?当优先级相同时,这些策略在授予处理时间方面是否相同?
MAN 页面中有很多没有答案的问题。
答案1
在unistd.h
OpenBSD 上,两者_POSIX_PRIORITY_SCHEDULING
和_POSIX_THREAD_PRIORITY_SCHEDULING
设置为-1
,表示不支持进程调度和线程执行调度选项(也不支持运行时,因为sysconf
功能显示)。
这意味着OpenBSD实现不支持基于设置的优先级进行调度,因此所有设置的优先级pthread_setschedparam
都是没有意义的。事实上,源头pthread_setschedparam
EINVAL
确实也表明了是否应该返回基于优先级的调度策略的疑问。
因此,回答您的第一个问题:目前您无法在 OpenBSD 中使用线程优先级,因为这不受支持。