Наличие двух QThreadPool в приложении

#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. Спасибо за ответ. Как я объяснил ситуацию подробнее в комментарии выше, если я определяю короткую задачу с более высоким приоритетом, и поскольку короткая задача выполняется в приложении намного чаще, то длительная задача задерживается больше, и я также не могу контролировать ее задержку.