NSOperationQueue vs pthread优先级

时间:2012-04-27 09:23:03

标签: c++ objective-c pthreads nsoperationqueue thread-priority

我有这个问题:

  • 我有一个使用某些线程的C ++代码。这些线程是pthread类型。
  • 在我的iPhone应用程序中,我使用NSOperationQueue以及一些C ++代码。

问题是:C ++ pthread的优先级始终低于NsOperationQueue

我该如何解决这个问题?我也试图给NSOpertionQueue低优先级但这个修复不起作用。

1 个答案:

答案 0 :(得分:1)

如果你不得不求助于优先考虑(特别是向上),它通常表明并发模型中的设计缺陷。这应该保留用于非常特殊的情况,例如实时线程(例如音频播放)。

首先评估您的线程和任务的运行方式,并确保您没有其他选择。通常,您可以执行一些简单的操作,例如减少操作队列的最大操作次数,减少总线程数,或者按照所需资源对任务进行分组。

您使用什么方法来确定线程的优先级?

另请注意,设置操作的优先级会影响排队操作的顺序(而不是线程本身)。

我总是能够通过调整分发来解决这个问题。你现在应该停止阅读:)


可用,但不推荐:

要降低操作的优先级,您可以在操作main中接近它:

- (void)main
{
  @autorelease {
    const double priority = [NSThread threadPriority];
    const bool isMainThread = [NSThread isMainThread];
    if (!isMainThread) {
      [NSThread setThreadPriority:priority * 0.5];
    }

    do_your_work_here

    if (!isMainThread) {
      [NSThread setThreadPriority:priority];
    }
  }
}

如果您确实需要在内核之后推送内核,那么就可以设置pthread的优先级:

pthreads with real time priority

How to increase thread priority in pthreads?