Зачем нужен async и io_context?
Изучаю многопоточность, и наткнулся на то, что предпочтительно использование async с обработчиками событий в многопоточности. Но я не совсем понимаю в чем его смысл. Перечитал несколько документаци и посмотрел много лекций на эту тему, но так и не монял в чем отличие, например, этого кода:
boost::asio::io_context io;
io.post([](){
do_some_work()
});
std::thread thread([&io]() {
io.run();
});
от этого:
std::thread thread([&io]() {
do_some_work();
});
Так же видел много примеров использования io_context с async в клиент-серверном взаемодействии с так называемыми обработчиками (handlers). Но точно так же не понимаю их смысл. Зачем они нужны, если можно просто писать методы подряд:
socket();
connect();
read();
handle();
Зачем использовать сложную конструкцию async c io_context, если можно написать все структурно (как я сделал выше) c использованием future/promise и будет читабельно и понятно.