Как на самом деле работает неблокирующий ввод-вывод с точки зрения клиента? - PullRequest
0 голосов
/ 12 октября 2018

Итак, я натолкнулся на идею блокирования и неблокирования ввода / вывода.Но из концепции и некоторых примеров реализации я понял, что мы реализуем код на стороне сервера для достижения этой природы кода.

Но теперь мой вопрос, если (например, почтальон отправляет HTTP-запрос)к серверу) запрос должен ждать ответа сервера, тогда какой смысл неблокировать ввод / вывод?(Пожалуйста, исправьте меня, если я ошибаюсь) Или вся концепция только для увеличения пропускной способности сервера вместо фактической асинхронной природы по отношению к клиенту.

Например, в одном из моих проектов я сделалсоздал почтовый запрос для создания запроса в системе для обработки, который будет возвращать идентификатор транзакции, теперь, используя этот идентификатор транзакции, я могу запросить сервер, чтобы узнать результат.

Возможно, я звучу слишком наивно, но концепция меня сильно смутила.Я не понимаю эту концепцию ясно.Пожалуйста, помогите.

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

запрос должен ждать ответа сервера, тогда какой смысл неблокировать ввод / вывод?

Есть путаница.Ожидание ответа и (не) блокировка ввода / вывода очень слабо связаны.Вы всегда должны ждать ответа.Вот почему вы сделали запрос для начала.Но вопрос таков: как?

Неблокирующий HTTP: «Уважаемый сервер, вот мой запрос, пожалуйста, обработайте его и отправьте мне ответ, а я тем временем собираюсь сделать что-то еще, например, вычислить n-я цифра Пи (я странный) ".

Блокировка HTTP:" Уважаемый сервер, вот мой запрос, пожалуйста, обработайте его и отправьте мне ответ, я буду терпеливо ждать его выполненияНичего ".

Или вся концепция только для увеличения пропускной способности сервера вместо фактической асинхронной природы по отношению к клиенту.

Вся концепция должна бытьвозможность делать другие вещи, ожидая ввода-вывода в то же время.И сделать это при минимальном использовании потоков, которые плохо масштабируются.

Асинхронные системы, то есть системы без части «Я буду ждать без дела», как правило, работают лучше за счет сложности.

Примечание: неблокирующий ввод / вывод может использоваться как на стороне сервера, так и на стороне клиента.Например, почти все движки JS в браузерах построены поверх некоторого асинхронного движка.JS часто является однопоточным, то есть неблокирующий ввод / вывод необходим для достижения любого параллелизма.

0 голосов
/ 12 октября 2018

Но из концепции и некоторых примеров реализации я понял, что мы реализуем код на стороне сервера для достижения этой природы кода.

Код реализуется вездевы делаете неблокирующий интерфейс.То, что сервер делает, не имеет отношения к тому, использует ли клиент блокирующий или неблокирующий пользовательский интерфейс, и то, что делает клиент, не имеет никакого отношения к тому, использует ли сервер блокирующий или неблокирующий пользовательский интерфейс.

if (например, почтальон отправляет HTTP-запрос на сервер) запрос должен ждать ответа сервера, тогда какой смысл неблокировать ввод-вывод?

чтобы не тратить ресурсы.

Давайте сначала рассмотрим простое консольное приложение, которое работает в сети, а затем что-то делает с результатами.В этом случае очень мало пользы от неблокирующего ввода-вывода, так как приложение просто будет сидеть и ждать, когда что-то сделает.

Теперь давайте рассмотрим простое консольное приложение, которое работает с 50 различными веб-сайтами.ресурсы и сопоставляет ответы.Теперь неблокирующий ввод / вывод более полезен, потому что при блокирующем вводе / выводе ему придется либо получать один ресурс за другим, либо ускорять 50 потоков.С неблокирующим вводом-выводом небольшое количество потоков - это все, что нужно для того, чтобы набрать 50 ресурсов и оперативно реагировать на каждый возвращающий ответ.

Теперь давайте рассмотрим версию этого приложения с графическим интерфейсом, которая хочетостаются чувствительными к пользовательскому вводу и работают на устройствах с низким энергопотреблением, в которых заблокированные потоки становятся все более дорогими.Преимущества описанного выше увеличиваются.

Наконец, рассмотрим веб-приложение, которое выполняет ввод-вывод как с клиентом, так и с клиентом для базы данных, файловой системы и, возможно, других веб-приложений.Он может иметь несколько запросов одновременно, и блокировка ввода-вывода, который он выполняет с клиентом, или любого из операций ввода-вывода, которые он выполняет с db, файлом или другими приложениями, будет стоить поток, что приведет к ограничению масштабируемости.на сколько запросов он может обрабатывать одновременно.Не блокировка ввода / вывода позволяет использовать потоки для других запросов, пока ввод / вывод находится в состоянии ожидания.

...