В проекте (многоагентная система для работы с потоком разнотиповых данных в реальном времени) используется многопоточность из стандартной библиотеки C++, а именно подход на основе потоков std::thread
.
Функционал каждого агента исполняется в отдельном потоке. Учитывая соотношение между количеством агентов и характеристиками железа, на котором работает эта система - такое разделение (на потоки) имеет логический характер, а не производительный (это будет решаться позже).
Прочитал недавно про подход на основе задач std::async
.
Вопросы:
Может ли мне дать какое-то преимущество этот подход?
И какие сложности могут возникнуть в рамках описанной системы?
Где прочитать про эту технологию? Я смотрел только пару обзорных статей.
Эффективность std::async
сильно зависит от реализации. В старых версиях gcc, например, std::async
вообще всегда работает в том же потоке, где вызывается future.get()
, несмотря на флаг launch_async
. Но даже если реализация хорошая, в лучшем случае std::async
будет отправлять задачу в обычный пул потоков. В этом случае проще взять сразу готовый пул потоков и работать с ним, тем более есть пулы потоков с поддержкой std::future
, что делает их интерфейс похожим на std::async
. Одна из реализаций есть тут.
Возможно, для вашей задачи будет удобно использовать в качестве пула потоков boost::asio
, поскольку помимо обычных возможностей пула потоков там есть таймеры и асинхронный ввод-вывод (ради чего библиотека и создавалась).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Программа должна считывать массив из файла и искать в нём минимальный элемент, но что-то не получается нормально считать сам массивВ чем...
Возможно ли через функцию CreateFile установить пароль на PhysicalDrive1, те
Задача состоит в том, что нужно найти в графе размера N(кол-во вершин) вершинное покрытие размера KАлгоритм работает следующим образом:
Не получается перегрузить оператор = для структурыПрограмма компилируется, но при выполнении прямого слияния крашится