2016-08-19 2 views

ответ

1
  1. Используя HighestPriority в приложении QT, вы даете, что особый приоритет потоков над всеми другими потоками внутри приложения. Это может быть полезно, если у вас несколько потоков и вы хотите, чтобы ваши фоновые потоки не крали CPU из основного потока. Вред? Не так много вреда может быть сделано, если оно неправильно используется человеческой ошибкой.

  2. Существует не так много вреда, что может быть сделано, если ваше приложение не запускает cpu, что обычно является результатом ошибки или плохо разработанного кода.

  3. Используйте его, когда вашему приложению необходимо выполнить несколько действий одновременно, но вы хотите, например, убедиться, что главное окно остается отзывчивым. Очевидно, для этого вы просто назначаете главное окно HighestPriority.

+0

Большое спасибо @DanK. На самом деле, у меня всего 2 потока (поток основного окна и другой поток), этот другой поток должен выполнять некоторые тяжелые вычисления. Должен ли я использовать ** HighestPriority ** в этом случае, или это необязательно? Каково твое мнение? – KelvinS

+2

Задавать высокий приоритет для потоков вычислений - это почти всегда плохая идея. Вы хотите указать приоритет * low * для этих потоков, чтобы поддерживать зависящий от потока графический интерфейс; потерянное время ЦП должно быть ничтожно малым, так как в правильном графическом приложении основной поток находится в режиме ожидания, ожидая ввода пользователем (или таймеров) 99% времени. –

+1

Добро пожаловать Келвин Сэлтон! Это сводится к тому, к какому потоку вы хотите расставить приоритеты. Если ЦП ограничен (что иногда может быть, если что-то еще в системе забивает его), тогда поток QT, которому назначается HighestPriority, будет более отзывчивым. –

2
  1. планировщик будет уделять больше внимания к этой теме по сравнению с другими на более низким приоритетом. Если вы запрашиваете наивысший приоритет нить, который никогда не дает (например, поток, который выполняет «тяжелые» вычисления, даже не блокируя системные вызовы), ваши потоки с более низким приоритетом могут остаться голодными для процессорного времени.

    Типичный пример - рабочий поток с высоким приоритетом, конкурирующий за процессор с потоком графического интерфейса пользователя - ваш графический интерфейс, скорее всего, будет неактуальен большую часть времени.

    Конечно, детали будут зависеть от точной работы планировщика ОС, на котором работает ваше приложение. В Windows у меня были плохие впечатления, даже с рабочей нитью, конкурирующей с нитью GUI на том же уровне приоритета. Недавние ядра Linux чувствуют себя лучше в этом отношении.

  2. В большинстве ОС приоритет потока как-то сочетается с приоритетом процесса, поэтому он не должен наносить ущерб другим процессам.

  3. Лично мне никогда не приходилось его использовать.

    Как я писал в комментарии, обычно расположение противоположное - вы даете low приоритет для фона, задачи по загрузке процессора; разница в скорости обычно незначительна (обычно поток GUI и другой фоновый поток большую часть времени работают на холостом ходу, ожидая событий или опроса периодически), но вы держите их отзывчивыми, когда они должны быть.

    Возможное использование для высокого приоритета нити с может быть для мягкого реального времени вещи, где ваш потока потребность быть запланирована так часто, выгружая более низкий приоритет потоков, делать свое дело быстро и выход обратно процессор планировщика ,

2

Просто помните, что если вы повысить приоритет любого другого потока, чем в основном потоке, вы утверждаете, что работа нити делает это более важно, чем работа, необходимая для поддержания пользовательского интерфейса отзывчивым. Ваш пользовательский интерфейс с радостью получит предварительный выпуск с помощью потока с наивысшим приоритетом.

Очень важные потоки с высоким приоритетом должны использоваться, когда важна латентность ответа. Они должны выполнять минимальный объем работы. Приоритет высоких потоков в этом случае означает, что, как только поток будет запущен, это стоит, чтобы сжечь циклы процессора, необходимые для переключения контекста. Тогда это того стоит. Обычно вы используете поток с высоким приоритетом для аудио- или машинной связи, но будьте осторожны, например, Части Linux самого драйвера устройства или вышележащие слои могут работать в потоке с более низким приоритетом!

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