Что такое управляемый событиями io (контекст: Apache MINA, JBoss Netty)? - PullRequest
0 голосов
/ 07 апреля 2011

Я хочу понять, что такое ИО. Я слышал, что это отличается от традиционной модели запроса / ответа на блокировку. У нас есть какой-нибудь пример, чтобы это объяснить? и как это будет способствовать увеличению производительности?

Примеры будут высоко оценены.

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

Я предполагаю, что с тех пор, как прошло 4 месяца, вы получили свои ответы.Независимо от того, что идет ...

Нетти http://www.jboss.org/netty

Мина http://mina.apache.org/

C10K http://www.kegel.com/c10k.html

Чтобы понять часть проблемы, которая былаIo пытается решить, посмотрите на ссылку C10K выше.Масштабируемость является одним из основных преимуществ Evented io.

Традиционный веб-сервер будет обрабатывать запрос, а затем возвращать ответ (синхронный / блокирующий).Для каждого запроса обычно требуется собственный поток.

Управляемый событиями веб-сервер обработает запрос, затем создаст событие (асинхронный / неблокирующий ввод-вывод) и затем вернет ответ.Несколько запросов совместно используются одним потоком / процессом.

Evented IO должен иметь возможность обрабатывать больше запросов на поток, чем обычный веб-сервер.Вы не могли бы ускорить ваше веб-приложение с помощью четного ввода-вывода, но оно должно обрабатывать большое количество соединений намного проще, чем традиционный веб-сервер.Это означает, что для масштабирования требуется меньше машин.

Хотя я бы сказал, что архитектура Evented io заставит вас разработать веб-приложение для обработки небольших объемов данных.Очень похоже на приложение типа google mail, которое использует множество вызовов ajax для опроса данных на сервере, а затем выполняет небольшие обновления в браузере.Это само по себе имеет много преимуществ, которые помогут ускорить и улучшить масштабирование на вашем сервере.

Нетти и Мина предоставляют множество примеров кода.

2 голосов
/ 03 февраля 2016

Это очень старый вопрос, но я предполагаю, что это может помочь кому-то другому понять программирование, управляемое событиями:

Эта следующая аналогия может помочь вам понять программирование событий ввода / вывода, проводя параллель с ожиданием.линия на рецепции врача.

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

Если одинокому парню требуется 3 минуты, чтобы заполнить, 10-му парню придется подождать до 30 минут.Теперь, чтобы сократить это время ожидания 10-го парня, решение будет заключаться в увеличении числа администраторов, что является дорогостоящим.Это то, что происходит на традиционных веб-серверах.Если вы запрашиваете информацию о пользователе, последующий запрос других пользователей должен дождаться завершения текущей операции, извлекаемой из базы данных.Это увеличивает «время до ответа» 10-го запроса и увеличивается экспоненциально для n-го пользователя.Чтобы избежать этого, традиционные веб-серверы создают поток (эквивалентный увеличению числа регистраторов) для каждого отдельного запроса, т. Е. В основном он создает копию сервера для каждого запроса, что является дорогостоящим интервалом потребления ЦП, поскольку для каждого запроса потребуются операционные системы.нить.Чтобы увеличить масштаб приложения, вам придется использовать много вычислительных мощностей в приложении.

Event Driven : Другой подход к увеличению «времени отклика» очереди заключается в переходе к событию.проездной подход, при котором парень в очереди будет сдан, попросит заполнить и вернуться по завершении.Следовательно, администратор всегда может принять запрос.Это именно то, что Javascript делает с самого начала.В браузере javascript будет реагировать на события щелчка пользователя, прокрутки, пролистывания или выборки из базы данных и так далее.Это возможно в javascript по своей сути, потому что javascript рассматривает функции как объекты первого класса, и они могут быть переданы в качестве параметров другим функциям (так называемые обратные вызовы) и могут быть вызваны при завершении конкретной задачи.Именно это и делает node.js на сервере.Вы можете найти больше информации о программировании, управляемом событиями и блокировке ввода-вывода, в контексте узла здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...