Информация об изменениях

Сообщение Re[2]: Сокеты и многопоточность от 04.08.2016 12:12

Изменено 04.08.2016 12:27 smeeld

Здравствуйте, b0r3d0m, Вы писали:


Когда делаете async_write, то делается обычныя неблокирующая запись в сокете в потоке, который делает этот async_write, и в специальную очередь помещается структура с хендлером. Эта очередь обслуживается в потоке, которые исполняет io_service::run, хендлер будет исполняться в этом потоке когда ОС вернёт в юзерспайс сигнал об отправке или приёме пакета. Если в хендлере будет ещё один async_write, то запись в сокет будет происходить уже в потоке, исполняющем хендлер, то есть в том, который прокручивает io_service::run. То же самое в остальных async* фукциях из boost::asio. Упомянутая strand-это разновидность реализации, strand_io_service, там имеется ещё task_io_service и win_iocp_io_service. И вообще, если чего не поятно из доков, то лучше смотреть в исходники, там всё поятно.
Re[2]: Сокеты и многопоточность
Здравствуйте, 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. И вообще, если чего не понятно из доков, то лучше смотреть в исходники, там всё поятно.