1

У меня есть эта проблема:NSOperationQueue против приоритета PTHREAD

  • У меня есть код C++, которые используют несколько потоков. Эти нити имеют тип pthread.
  • В моем приложении iPhone я использую NSOperationQueue, а также код C++.

Проблема в том, что python C++ всегда имеет более низкий приоритет, чем NsOperationQueue.

Как это исправить? Я также попытался дать низкий приоритет NSOpertionQueue, но это исправление не работает.

ответ

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?

Смежные вопросы