В настоящее время у меня есть работающая реализация достаточной производительности, которая использует настраиваемое количество рабочих процессов, которые выглядят для необработанного элемента в 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
Мобильная версия