使用pthreads时的后台线程(不错,优先级)
Background threads when using pthreads (nice, priority)
我有一个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的良好级别?
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- C++ 带有函数指针的运算符优先级
- 将更高的优先级设置为 boost::asio 线程处理进程
- 在C++中打印对的优先级队列的所有值时出现问题
- <<运算符优先级与字符串比较
- SFINAE 模板专用化优先级
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 使用pthreads时的后台线程(不错,优先级)