io_service::run()
вызывается потоком A. Безопасно ли вызывать async_write
из потока B?
io_service::run()
вызывается потоком A. Являются ли асинхронные операции, выполняемые потоком A или потоком A, гарантированным только обработчикам вызовов и за кулисами, могут быть дополнительные потоки, которые выполняют операции?
io_service::run()
вызывается потоком A. Некоторые async_read
вызывают async_read
и async_write
используя тот же буфер. Можно ли предположить, что к буфере будет доступна не более одной операции за раз? Или это так, что только обработчики называются серийно, но за кулисами чтение и запись могут происходить одновременно?
В документации говорится: "Программа должна убедиться, что поток не выполняет никаких других операций чтения (таких как async_read
, функция async_read_some
потока или любые другие async_read_some
операции, выполняющие чтение), пока эта операция не завершится". Правильно ли это интерпретировать это как "Вы не должны выполнять более одной операции чтения в сокете одновременно, но вы можете выполнять 10 операций чтения на 10 различных сокетах".?
Имея сокет, который на неопределенный срок принимает данные, является хорошей идеей вызывать async_read
и вызывать его снова из обработчика async_read?
Выполняет ли io_service::stop()
все ожидающие операции async или просто перестает принимать новые и выполняет отложенные?
io_service - это очередь сообщений (в основном), в то время как сокет, который отправляет свои сообщения в io_service, является чем-то другим.
1: Да
4: Да, нормально выполнять отдельные операции на разных сокетах.
5: Да, если вы проверите примеры того, как они это делают.
6: Учитывая, что в справочном руководстве сказано
Все вызовы функций run() или run_one() должны возвращаться как можно скорее.
Я бы сказал, что это может сделать.
Для чисел 2 и 6 источник доступен, поэтому лучший способ ответить на этот вопрос - загрузить и прочитать его.