Re[2]: Сокеты и многопоточность
От: smeeld  
Дата: 04.08.16 12:12
Оценка:
Здравствуйте, 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. И вообще, если чего не понятно из доков, то лучше смотреть в исходники, там всё поятно.
Отредактировано 04.08.2016 12:27 smeeld . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.