#multithreading #qt #qthread
#многопоточность #qt #qthread
Вопрос:
У меня есть короткая задача и длинная задача. Я не хочу, чтобы потоки, выполняющие длинную задачу, влияли на скорость выполнения потоков, выполняющих короткую задачу. На моем компьютере 8 потоков, если я создам 2 пула потоков, каждый с максимальным числом потоков 4, будут ли эти потоки автоматически изолированы друг от друга?
QThreadPool* shortPool = new QThreadPool(this);
shortPool->setMaxThreadCount(QThread::idealThreadCount() / 2);
QThreadPool* longPool = new QThreadPool(this);
longPool->setMaxThreadCount(QThread::idealThreadCount() / 2);
Комментарии:
1. Не полностью, нет. Конфликт доступа к основной памяти может иногда требовать дополнительных состояний ожидания. В большинстве случаев беспокоиться не о чем.
2. В любом случае, почему бы просто не создать один пул с восемью потоками?
3. Если вы хотите установить приоритет одной задачи над другой, попробуйте использовать
priority
параметр вQThreadPool::start
. Хотя документация несколько расплывчата.4. @MartinJames Спасибо за ответ. короткие задачи обрабатывают задачу реального времени, которая не может быть отложена. также потоки, обрабатывающие длительную задачу, должны завершаться менее чем за 1 секунду. Если длительные задачи не завершаются в течение 1 секунды, поступают новые данные для обработки, и через некоторое время новые фрагменты данных попадают в память, приложение выходит из строя.
5. @G.M. Спасибо за ответ. Как я объяснил ситуацию подробнее в комментарии выше, если я определяю короткую задачу с более высоким приоритетом, и поскольку короткая задача выполняется в приложении намного чаще, то длительная задача задерживается больше, и я также не могу контролировать ее задержку.