Использование std::async и/или пула потоковC++

Программы на C++. Форум разработчиков
Anonymous
Использование std::async и/или пула потоков

Сообщение Anonymous »

Я создал класс, который объединяет производителя и потребителя, несколько экземпляров которого читают данные из разных источников. Данные, которые производитель помещает в FIFO, должны быть дополнительно эффективно обработаны, прежде чем их можно будет использовать.
В настоящее время у меня есть работающая реализация достаточной производительности, которая использует настраиваемое количество рабочих процессов, которые выглядят для необработанного элемента в FIFO (реализованного как std::deque) начните его обработку и разблокируйте FIFO, как только они начнут это делать, оставив потребителю ждать, если обработка не будет готова в тот момент, когда элемент необходим.
Но, по крайней мере на первый взгляд, это идеальный вариант использования std::async. Моя цель — простота и/или надежность и, возможно, дальнейшее повышение производительности.
За исключением того, что после того, как я начал читать эту тему, мне стало известно, что первоначальное намерение std::async было абстрагируя пул потоков, но стандарт в конечном итоге оставил решение об его использовании разработчику. Я использую Ubuntu (GCC), и хотя реализация Microsoft (по сообщениям) использует пул потоков, GCC предположительно не использует. Поэтому у меня возникает вопрос:
  • Можно ли использовать std::async с пулом потоков, не получив при этом худшего решения?
  • Есть ли от этого польза? Насколько я понимаю, ответ отрицательный, пул потоков сводит на нет любой вариант использования std::async.
  • Если я решу используйте пул потоков, пользовательский сам по себе добавляет сложности и, возможно, не дает никакого выигрыша в производительности.
Я знаю это без дополнительные подробности, возможно, здесь нет одного правильного ответа, как это часто бывает с многопоточной оптимизацией, но я чувствую Я столкнулся с шаблоном, который анализировался ранее.
Сначала я попробовал реализацию C++, используя только std::threads, но искал более простой и, возможно, более эффективный код.

Подробнее здесь: https://stackoverflow.com/questions/792 ... hread-pool

Вернуться в «C++»