В этом разделе перечислены конкретные детали реализации платформы, такие как демультиплексирующий механизм по умолчанию, количество потоков, созданных внутри, и когда создаются потоки.
Используется<select>для демультиплексирования. Это означает, что количество файловых дескрипторов в процессе не может превышать<FD_SETSIZE>.
Нити:
Демультиплексирование с использованием<select>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Демультиплексирование с использованием<epoll>выполняется в одной из нитей, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Демультиплексирование с использованием</dev/poll>выполняется в одной из нитей, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Используется<select>для демультиплексирования. Это означает, что количество файловых дескрипторов в процессе не может превышать<FD_SETSIZE>.
Нити:
Демультиплексирование с использованием<select>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Демультиплексирование с использованием<kqueue>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Демультиплексирование с использованием<kqueue>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Используется<select>для демультиплексирования. Это означает, что количество файловых дескрипторов в процессе не может превышать<FD_SETSIZE>.
Нити:
Демультиплексирование с использованием<select>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Используется<select>для демультиплексирования. Это означает, что количество файловых дескрипторов в процессе не может превышать<FD_SETSIZE>.
Нити:
Демультиплексирование с использованием<select>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Используется<select>для демультиплексирования. Это означает, что количество файловых дескрипторов в процессе не может превышать<FD_SETSIZE>.
Нити:
Демультиплексирование с использованием<select>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
В большинстве случаев<min(64,IOV_MAX)>буферы могут быть переданы в одной операции.
Демультиплексирование с использованием<select>выполняется в одной из ниток, которая вызывает<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
Для розеток в одной операции может быть передано не более 16 буферов.
Демультиплексирование с использованием портов завершения ввода/вывода выполняется во всех потоках, которые вызывают<io_service::run()>,<io_service::run_one()>,<io_service::poll()>или<io_service::poll_one()>.
Дополнительный поток на<io_service>используется для запуска таймеров. Эта нить создается при строительстве первых<deadline_timer>или<deadline_timer_service>объектов.
Для демультиплексирования используется дополнительная нить<io_service>. Эта нить создана по первому призыву<async_connect()>.
Дополнительный поток на<io_service>используется для эмуляции асинхронного разрешения хоста. Эта нить создается по первому призыву либо<ip::tcp::resolver::async_resolve()>, либо<ip::udp::resolver::async_resolve()>.
Скэттер-Гейзер:
Для розеток не более 64 буферов могут быть переданы в одной операции.
Для ручек, ориентированных на поток, в одной операции может быть передан только один буфер.
Повышаю. Asio предоставляет ограниченную поддержку Windows Runtime. Для этого необходимо включить языковые расширения. Из-за ограниченных возможностей, предоставляемых Windows Runtime API, поддержка поставляется со следующими оговорками:
Основные средства, такие как<io_service>,<strand>, буферы, составные операции, таймеры и т.д., должны работать как обычно.
Для сокетов поддерживается только TCP на стороне клиента.
Явное связывание клиентского сокета TCP не поддерживается.
Функция<cancel()>не поддерживается для розеток. Асинхронные операции могут быть отменены только путем закрытия розетки.
Операции, использующие<null_buffers>, не поддерживаются.
Резолверы не поддерживают названия служб, только номера. То есть вы должны использовать «80», а не «http».
Большинство флагов запросов-решителей не имеют эффекта.
Демультиплексирующий механизм:
Использует класс<Windows::Networking::Sockets::StreamSocket>для реализации асинхронных операций сокетов TCP.
Нити:
Завершения событий доставляются в пул потоков Windows и размещаются в<io_service>для выполнения обработчика.
Для запуска таймеров используется дополнительный поток на<io_service>. Эта нить создается при строительстве объектов первого таймера.
Скэттер-Гейзер:
Для розеток максимум один буфер может быть передан в одной операции.
Статья Platform-Specific Implementation Notes раздела Boost.Asio Overview может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.