Каковы преимущества и вред использования HighestPriority в QThread (QThread::HighestPriority
)?
Это может повредить какую-то другую операцию?
Когда я должен использовать это?
Используя HighestPriority в вашем приложении QT вы даете этому конкретному потоку приоритет над всеми другими потоками в вашем приложении. Это может быть полезно, если у вас несколько потоков и вы хотите убедиться, что фоновые потоки не крадут ЦП из вашего основного потока. Вред? Немного вреда можно сделать, если он не используется человеком по ошибке.
В этом нет ничего страшного, если ваше приложение не загружает процессор, который обычно является результатом ошибки или плохо разработанного кода.
Используйте его, когда вашему приложению нужно выполнить несколько действий одновременно, но вы хотите, например, убедиться, что главное окно остается отзывчивым. Очевидно, что для этого нужно просто назначить главное окно HighestPriority.
Планировщик будет уделять больше внимания этому потоку по сравнению с другими с более низким приоритетом. Если вы запрашиваете наивысший приоритет для потока, который никогда не дает (например, для потока, который выполняет «тяжелые» вычисления, даже не блокируя системные вызовы), ваши потоки с более низким приоритетом могут остаться без процессорного времени.
Типичным примером является рабочий поток с высоким приоритетом, конкурирующий за ЦП с потоком GUI — ваш GUI, скорее всего, будет не отвечать на запросы большую часть времени.
Конечно, детали будут зависеть от точной работы планировщика ОС, на которой работает ваше приложение. В Windows у меня был плохой опыт даже с рабочим потоком, конкурирующим с потоком GUI с тем же уровнем приоритета. Последние ядра Linux чувствуют себя намного лучше в этом отношении.
В большинстве ОС приоритет потока как-то сочетается с приоритетом процесса, поэтому он не должен сильно повредить другим процессам.
Лично мне никогда не приходилось им пользоваться.
Как я написал в комментарии, как правило, расположение противоположное — вы даете низкий приоритет задним фоном, задачи загрузки процессора; разница в скорости, как правило, незначительна (обычно поток с графическим интерфейсом и другие фоновые потоки простаивают большую часть времени, ожидая событий или периодически опрашивая), но вы сохраняете их отзывчивыми, когда это необходимо.
Возможное использование для потока с высоким приоритетом может быть для программных вещей в реальном времени, где ваш поток потребности планироваться время от времени, вытесняя потоки с более низким приоритетом, делать свое дело быстро и возвращать ЦП планировщику.
Просто помните, что если вы повышаете приоритет любого потока, отличного от основного потока, вы заявляете, что работа, выполняемая этим потоком, является более важной, чем работа, необходимая для обеспечения отзывчивости пользовательского интерфейса. Ваш пользовательский интерфейс с удовольствием будет вытеснен потоком с наивысшим приоритетом.
Потоки с очень высоким приоритетом следует использовать, когда важна задержка ответа. Они должны выполнять минимальный объем необходимой работы. Высокий приоритет потока в этом случае означает, что как только поток будет запущен, он будет стоило того прожечь циклы процессора, необходимые для переключения контекста. Лучше стоить того. Обычно вы используете высокоприоритетную нить для аудио или машинной связи, но будьте осторожны, например, на Части Linux самого драйвера устройства или слоев над ним в любом случае могут работать в потоке с более низким приоритетом!