Ответ 1
На самом деле это не так - или вещь - вы можете использовать фьючерсы (вместе с promises) с созданным вручную std:: threads. Использование std::async
- это удобный способ отключить поток для некоторых асинхронных вычислений и вывести результат обратно через будущее, но std::async
в текущем стандарте довольно ограничен. Это станет более полезным, если предлагаемые расширения для включения некоторых идей из Microsoft PPL будут приняты.
В настоящее время std::async
, вероятно, лучше всего подходит для обработки как очень длинных вычислений, так и длительной работы IO для довольно простых программ. Однако это не гарантирует низкие накладные расходы (и на самом деле способ, которым он указан, затрудняет реализацию с пулом потоков за кулисами), поэтому он не подходит для более тонких рабочих нагрузок. Для этого вам либо нужно сворачивать свои собственные пулы потоков с помощью std::thread
, либо использовать что-то вроде Microsoft PPL или Intel TBB.
Вы также можете использовать std::thread
для "традиционного" кода стиля потока POSIX, написанного более современным и портативным способом.
Bartosz Milewski обсуждает некоторые ограничения способа std::async
, который в настоящее время указан в его статье Async Tasks в С++ 11: не совсем там