Комментарии 9
Если захочется оптимизировать пул потоков, то очень советую посмотреть видео-лекцию. В ней рассмотрены и очереди под каждый поток, и task stealing.
Замерять скорость пула потоков задачей которая упирается в память- плохая идея. Мне кажется если переписать вашу задачу в однонаправленный обход массива то производительность будет еще выше. Конечно надо еще смотреть на то, что генерирует компилятор, возможно нужны будут какие нибудь флаги для включения AVX
Я пробовал однонаправленный проход, но там задачи выполнялись слишком быстро и thread pool не давал прироста производительности или он был очень маленьким. Хотелось привести более наглядный пример, но при этом не слишком сложный. Я планирую в следующей статье более подробно с этим разобраться и придумать более наглядный пример
Предложения:
1) Возвращать пользователю task_id при добавление задачи. Сейчас пользователь просто добавляет задачу и не знает её task_id.
2) Добавить выводимый результат в wait_result. Сейчас даём ссылкой переменную через аргумент функции. А можно и не готовить специально заранее переменную, а просто её получать. https://github.com/skprpi/Habr/blob/main/thread_pool/best_version.cpp#L109
Кто такой Thread Pool и как его написать своими руками на С++