В синхронной модели, когда клиент подключается к серверу, клиент и сервер должны синхронизироваться друг с другом, чтобы завершить некоторые операции.
Между тем, асинхронная модель позволяет клиенту и серверу работать раздельно и независимо. Клиент отправляет запрос на установление соединения и что-то делает. Пока сервер обрабатывает запрос, клиент может делать что-то еще. После завершения операции событие завершения помещается в очередь в демультиплексоре событий, ожидая, когда Proactor (например, обработчик HTTP) отправит запрос назад и вызовет обработчик завершения (на клиенте). Эти термины используются в документе boost :: asio Шаблон проектирования Proactor: параллелизм без потоков .
Работая таким образом, асинхронная модель может принимать одновременные соединения без необходимости создания потока на соединение, что повышает общую производительность. Для достижения того же эффекта, что и в асинхронной модели, первая модель (синхронная) должна быть многопоточной. Для получения более подробной информации обратитесь к: Proactor Pattern (на самом деле я изучаю шаблон proactor, который используется для асинхронной модели из этого документа. Здесь приведено описание типичного веб-сервера синхронного ввода / вывода).
Правильно ли мое понимание предмета? Если это так, что означает, что асинхронный сервер может принимать запросы и возвращать результаты асинхронно (первый запрос на подключение, которому служба на веб-сервере не обязательно должна отвечать первым)? По сути, асинхронная модель не использует многопоточность (или многопоточность используется в отдельных компонентах, таких как компонент Proactor, Asynchronous Event Multiplexer (boost :: asio document)), а не при создании всего стека клиент-серверных приложений, который описан в многопоточной модели в документе Proactor Pattern, раздел 2.2 - Типичные ловушки и ловушки обычных моделей параллелизма ).