Здравствуйте, b0r3d0m, Вы писали:
Когда делаете async_write, то делается обычная неблокирующая запись в сокете в потоке, который делает этот async_write, и в специальную очередь помещается структура с хендлером. Эта очередь обслуживается в потоке, которые исполняет io_service::run, хендлер будет исполняться в этом потоке когда ОС вернёт в юзерспайс сигнал об отправке или приёме пакета. Если в хендлере будет ещё один async_write, то запись в сокет будет происходить уже в потоке, исполняющем хендлер, то есть в том, который прокручивает io_service::run. То же самое в остальных async* фукциях из boost::asio. Упомянутая strand-это разновидность реализации, strand_service,
там имеется ещё task_io_service и win_iocp_io_service. И вообще, если чего не понятно из доков, то лучше смотреть в исходники, там всё поятно.