Proactor и асинхронная запись

Boost asio реализует шаблон проектирования proactor, основанный на проактор ACE.

Я понимаю, почему нам нужно асинхронное чтение. Однако я запутался с асинхронной записью.

  1. Зачем нам нужна асинхронная запись? Полезно ли это и для соединения TCP/UDP (может ли запись в сокет TCP/UDP занять время)?
  2. Могу ли я смешивать асинхронное чтение с синхронной записью?

person dimba    schedule 05.04.2011    source источник
comment
Ваш второй вопрос мне не ясен, вы имели в виду смешать вместо беспорядок?   -  person Sam Miller    schedule 05.04.2011


Ответы (1)


1) Зачем нам нужна асинхронная запись? Полезно ли это и для соединения TCP/UDP (может ли запись в сокет TCP/UDP занять время)?

Асинхронная запись нужна по тем же причинам, что и асинхронное чтение. При использовании операций синхронной записи вызовы блокируются до тех пор, пока не будут переданы все данные. Это нежелательно по ряду причин. В первую очередь для достижения параллелизма без использования явных потоков это основа шаблон проектирования proactor.

2) Могу ли я смешивать асинхронное чтение с синхронной записью?

Да, их можно и нужно смешивать. Было бы очень странно использовать асинхронные операции чтения и синхронные операции записи.

person Sam Miller    schedule 05.04.2011
comment
1. Запись в TCP-сокет, например, длиннее, чем действия, связанные с асинхронной записью (создание буфера, иногда выделение фрагмента памяти, чтобы он оставался активным во время записи, постановка в очередь обратного вызова и т. д.). - person dimba; 05.04.2011
comment
2. Я не понял вашего ответа - смешивать или не смешивать? :) - person dimba; 05.04.2011
comment
2. А не могли бы вы объяснить, почему? - person dimba; 07.04.2011
comment
@dimba объяснение ответа № 2 такое же, как и ответ № 1. Смешивание синхронных операций с асинхронными нежелательно при использовании шаблона проектирования proactor. Для этого потребуются явные потоки, чтобы избежать блокировки цикла событий реактора epoll. - person Sam Miller; 07.04.2011
comment
Хорошо, я понимаю. Поэтому, чтобы получить асинхронное чтение, я вынужден использовать асинхронную запись. - person dimba; 10.04.2011