Использование 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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