#cpp #многопоточность #async #многоагентная_система
В проекте (многоагентная система для работы с потоком разнотиповых данных в реальном времени) используется многопоточность из стандартной библиотеки C++, а именно подход на основе потоков std::thread. Функционал каждого агента исполняется в отдельном потоке. Учитывая соотношение между количеством агентов и характеристиками железа, на котором работает эта система - такое разделение (на потоки) имеет логический характер, а не производительный (это будет решаться позже). Прочитал недавно про подход на основе задач std::async. Вопросы: Может ли мне дать какое-то преимущество этот подход? И какие сложности могут возникнуть в рамках описанной системы? Где прочитать про эту технологию? Я смотрел только пару обзорных статей.
Ответы
Ответ 1
Эффективность std::async сильно зависит от реализации. В старых версиях gcc, например, std::async вообще всегда работает в том же потоке, где вызывается future.get(), несмотря на флаг launch_async. Но даже если реализация хорошая, в лучшем случае std::async будет отправлять задачу в обычный пул потоков. В этом случае проще взять сразу готовый пул потоков и работать с ним, тем более есть пулы потоков с поддержкой std::future, что делает их интерфейс похожим на std::async. Одна из реализаций есть тут. Возможно, для вашей задачи будет удобно использовать в качестве пула потоков boost::asio, поскольку помимо обычных возможностей пула потоков там есть таймеры и асинхронный ввод-вывод (ради чего библиотека и создавалась).
Комментариев нет:
Отправить комментарий