Safari
Safari

Reputation: 11935

NSOperationQueue vs pthread priority

I have this problem:

The problem is this: the C++ pthread always have lower priority than NsOperationQueue.

How can I fix this? I have also tried to give low priority to NSOpertionQueue but this fix does not work.

Upvotes: 1

Views: 845

Answers (1)

justin
justin

Reputation: 104698

If you have to resort to twiddling priority (notably upwards), it's usually indicative of a design flaw in concurrent models. This should be reserved for very special cases, like a realtime thread (e.g. audio playback).

First assess how your threads and tasks operate, and make sure you have no other choice. Typically, you can do something simple, like reducing the operation queue's max operation count, reducing total thread count, or by grouping your tasks by the resource they require.

What method are you using to determine the threads' priorities?

Also note that setting an operation's priority affects the ordering of enqueued operations (not the thread itself).

I've always been able to solve this problem by tweaking distribution. You should stop reading now :)


Available, but NOT RECOMMENDED:

To lower an operation's priority, you could approach it in your operation's 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];
    }
  }
}

If you really need to push the kernel after all that, this is how you can set a pthread's priority:

pthreads with real time priority

How to increase thread priority in pthreads?

Upvotes: 1

Related Questions