使用pthreads时的后台线程(不错,优先级)

Background threads when using pthreads (nice, priority)

本文关键字:不错 优先级 线程 pthreads 后台 使用      更新时间:2023-10-16

我有一个GUI应用程序,它正在使用pthreads进行一些繁重的后台处理。

当后台处理正在运行时,GUI非常没有响应,我认为这是因为后台线程缺少CPU时间。

在Windows上,您可以在后台线程上::SetThreadPriority(hThread,THREAD_PRIORITY_BELOW_NORMAL),一切都很好。

然而,在Linux上,我使用pthreads,找不到一个好的替代方案。

我已经考虑过了;

  • ::sched_setscheduler(sched_FFIFO)或::sched_SEtschedule(sched_RR)-这是不可行的,因为它需要root(对我的GUI应用程序来说不太好)-这也会使GUI线程有太多的CPU;我只希望GUI优先于后台线程
  • ::pthread_setschedparam,但当使用除SCHED_FFIFO或SCHED_RR之外的任何不受支持的内容时(:SCHED_get_priority_min(SCHED_other)和::SCHED_get-priority_max(SCHED.other)均返回0)
  • 具有多个过程并使用::nice。GUI和后台线程之间的耦合太多,无法实现这一点(将如此多的代码移植到该设计中是一项艰巨的工作)
  • 使用::setpriority来重新调整后台线程。这确实有效,但与文档所说的直接相反:PThreads文档(因此可能会在以后在系统范围内"修复")

我确信这是GUI应用程序的常见模式,所以我错过了什么?

马库斯。

编辑:添加::设置选项列表的优先级(感谢ZalewaPL)

将后台线程的漂亮值设置为更高的值可能会有所帮助
请参阅:pthreads的良好级别?