Ответ
Да, в C++ проектах я применял несколько подходов к асинхронности, в зависимости от стандарта и требований.
Основные инструменты:
- C++11/14:
std::async,std::futureиstd::promiseдля запуска задач в отдельных потоках и получения результатов. - C++20 и новее: Корутины (
co_await,co_return) для написания асинхронного кода, который выглядит как последовательный. Использовал библиотеки вродеcppcoroили фреймворки (Boost.Asio с корутинами). - Сетевые/событийные фреймворки: Boost.Asio для асинхронного ввода-вывода на основе колбэков (completion handlers).
Пример с std::async (C++11):
#include <future>
#include <iostream>
#include <chrono>
int long_computation() {
std::this_thread::sleep_for(std::chrono::seconds(2));
return 42;
}
int main() {
// Запускаем тяжелую операцию асинхронно
std::future<int> result_future = std::async(std::launch::async, long_computation);
// Основной поток может делать другую работу
std::cout << "Main thread is working...n";
// Блокируемся, пока результат не будет готов
int result = result_future.get();
std::cout << "Async result: " << result << 'n';
return 0;
}
Почему это важно: Асинхронность позволяет избегать блокировок основного потока (например, UI или сетевого цикла), повышая отзывчивость и общую пропускную способность системы.