- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
В чем разница между std::thread и std::async?
Хотелось бы понять, в чем разница между std::thread и std::async в плане организации работы с многопоточностью. Этот вопрос уже задавался вот тут В чем принципиальная разница между std::async (launch) и std::thread?, но мне хотелось бы получить более углубленный ответ.
Мне приходилось использовать потоки вот так:
void funcA() {
// do something
}
...
std::thread t1(funcA);
// do something else
t1.join();
А асинк я использовал вот так
bool funcB() {
bool val;
// do something
return val;
}
...
std::future<bool> futureResultB = std::async(std::launch::async, [&]() {
return funcB();
});
// do something else
auto res = futureResultB.get();
Мне кажется, что эти два куска кода делают практически одно и то же, если не обращать внимание на то, что в одном случае есть возвращаемое значение, а в другом - нет.
Хотелось бы понять, какие особенности работы есть у каждого из этих инструментов, что может один, чего не может другой? Я понимаю, что я использую многопоточку на очень примитивном уровне, поэтому хотелось бы понять, какие возможности предоставляет каждый из способов?
Ответы (1 шт):
std::thread
если нужно ручное управление потоками, но в апи ОС лезть не хочется. Для пуула например.
std::async
если нужно тупо запустить код в другом потоке. Как конкретно он запустится там на новом потоке или на ранее созданном заранее неясно. Тут как стд реализовали. Лучше приоритет потока в таком коде не выставлять.