В этом разделе перечислены конкретные детали реализации платформы, такие как демультиплексирующий механизм по умолчанию, количество потоков, созданных внутри, и когда создаются потоки.
Используется<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>, не поддерживаются.