Отпуск по уходу за ребенком закончился, и сегодня я снова начал работать в обычном режиме, как раз к мероприятию Mi Noodle Festival, и я буду занят некоторое время. Время проведения Mi Noodle Festival с 4.03 до 4.10. Есть много скидок. Если вам интересно, вы можете обратить внимание на приложение mi.com или Xiaomi Store.
Сегодня я дал вам преимущество: динамик Xiaoai размера F, говорят, что он хорошо продается, и его нелегко захватить Воспользуйтесь преимуществом этой компании, я поделюсь им с вами, чтобы показать вашу поддержку и поддержку.
Работа Nuggets действительно заботливая.Он взял на себя инициативу найти меня и сказал: Моя статья о благосостоянии не является технической статьей и не может быть помещена в информационный поток.Ее можно увидеть только на личной домашней странице.Техническая статья, с содержанием отправки льгот в конце. Еще раз спасибо за заботу и советы брата по операции Наггетс "Убийца".
У меня не было времени читать последующие главы реального боя RabbitMQ.Эта статья суммирует технические моменты, которыми ранее делилась команда проекта: Мониторинг и обработка событий Netty.
Через введение вы узнаете:
- Мониторинг событий, NIO, модель потоков и другие связанные концепции;
- Общая структура Netty;
- Мониторинг и обработка событий;
- Резюме проектной практики;
В этой статье сначала будут представлены первые два раздела, а в следующей — последние два раздела.
В конце этой статьи мы объясним правила извлечения выгоды, и все будут активно участвовать >_
Связанные концепции
Netty — это инфраструктура NIO, которая абстрагирует изменения статуса установления канала ввода-вывода, возможности чтения и записи в события и передает их в цепочке ответственности.Вы можете вставлять пользовательские обработчики в цепочку обработки, чтобы реагировать на интересные события.Мониторинг и обработка .
Поэтому сначала познакомьтесь с основными понятиями мониторинга событий, модели цепочки ответственности, интерфейса сокетов, модели ввода-вывода, модели потоков и т. д., которые впоследствии очень помогут понять, как Netty отслеживает и обрабатывает события.
прослушиватель событий
Шаблон прослушивателя JDK в основном включает следующие элементы:
- Объект события EventObject
- Интерфейс прослушивателя событий EventListener
- пользовательский источник событий
- триггер события
Шаблон очень прост, пользователь может настроить источник события, сохранить соответствующие данные инициирующего объекта, и после запуска события они передаются обработчику, который зарегистрировал событие. Интерфейс прослушивателя событий предназначен для унификации методов обработчика.
Возьмем понятное событие нажатия кнопки, где ActionListener — прослушиватель событий, а ActionEvent — объект события, содержащий источник события:
Конкретный процесс реализации комплекса мониторинга событий:
- определить источник события;
- Уточните возможные события и определите их как различные объекты событий или методы событий;
- Обеспечьте структуру хранения для сохранения объекта, прослушивающего событие, и когда событие произойдет, прослушиватель будет уведомлен;
- Выполнить метод обратного вызова для бизнес-обработки;
Модель цепочки ответственности
В основном это относится к организации обработчиков событий.Через модель цепочки ответственности очень удобно добавлять собственные обработчики на любом узле обработки.
Что касается концепции цепочки ответственности, вот краткое описание: разрешить нескольким объектам иметь возможность обрабатывать запрос, чтобы избежать связи между отправителем и получателем запроса, соединить объект в цепочку и следуйте по цепочке Передавайте запрос, пока объект не обработает его.
socket
Вообще говоря, NIO в основном предназначен для сетевого ввода-вывода, чтения данных с сетевой карты и записи данных на сетевую карту.Это источник данных режима прослушивателя.
Сетевое программирование в основном осуществляется через интерфейс сокетов, предоставляемый операционной системой.Понимание интерфейса сокетов позволяет суммировать события.
Сокет — это унифицированный интерфейс между пользовательскими процессами и сетевыми протоколами ядра. Сокет также является особым видом файла.Сетевое взаимодействие можно рассматривать как чтение файла, что делает управление сетью таким же удобным, как и управление файлом.
Модель NIO и IO
NIO относится к неблокирующему вводу-выводу. Обычно мы называем ввод-вывод блокирующим вводом-выводом. Если вы хотите полностью понять эти концепции, вам придется много говорить. Вот краткое изложение.
Память, занимаемая процессом, включает пользовательский режим и режим ядра. В целях безопасности пользовательский код не может напрямую работать с памятью режима ядра. Он взаимодействует через системные вызовы, такие как чтение сетевых данных. Процесс взаимодействия выглядит следующим образом:
После того, как пользовательский поток инициирует запрос на чтение, ему необходимо дождаться поступления данных перед возвратом. В течение этого периода пользовательский поток не может ничего делать. Если это сетевое программирование, может прослушиваться множество объектов Socket, что создаст большое количество потоков, подлежащих блокировке, что приводит к нерациональному использованию ресурсов и снижению производительности.
В ответ на эту ситуацию появилась концепция модели IO несколькими способами:
- Синхронный неблокирующий ввод-вывод;
- Мультиплексирование IO;
- Асинхронный ввод-вывод;
Для конкретного ознакомления, в Интернете много информации, поэтому я не буду вдаваться в подробности. Здесь я упомяну только мультиплексирование ввода-вывода. Позвольте мне рассказать о моем понимании. Этот метод используется в нашем проекте.
Так называемое мультиплексирование в основном связано с тем, что операционная система предоставляет нам этот режим разработки: интересующие события ввода-вывода (создание, чтение, запись и т. д.) могут быть зарегистрированы заранее, а несколько объектов сокета могут быть зарегистрированы в селекторе селектора. Таким образом, один пользовательский поток может отслеживать несколько объектов сокета.При возникновении события будет выполняться поиск соответствующего сокета для чтения, записи и других операций.
Друзья, которые раньше занимались разработкой NIO, вы можете посмотреть на следующий пример, чтобы просмотреть весь процесс:
резьбовая модель
Выше упоминалось мое понимание мультиплексирования и упоминалось, что один поток слушает несколько сокетов, но если сокетов много, один поток не может с этим справиться. Кроме того, прием и оценка событий, а также чтение, обработка и запись данных могут выполняться в разных потоках.
Это приводит к концепции многопоточных моделей, таких как модели Reactor и Proactor. Конкретные детали не будут представлены. В Интернете есть много материалов, и конечной целью является повышение производительности обработки событий ввода-вывода.
Общая структура Netty
Эта часть в основном предназначена для понимания Netty и не вникает сначала в принцип ее реализации.
Обзор
Netty — это асинхронная среда сетевых приложений, управляемая событиями, которая поддерживает быструю разработку поддерживаемых высокопроизводительных серверов и клиентов, ориентированных на протокол; Он использует мощь высокоуровневого API Java и скрывает его за простым в использовании API;
- Ядро (основная часть) представляет собой некую общую абстракцию базовой сетевой связи, эта часть является ключевой.
- Транспортные услуги (услуги передачи), определение конкретных транспортных возможностей сети и некоторые реализации.
- Поддержка протокола (поддержка протокола), netty обеспечивает кодирование и декодирование для некоторого общего соглашения.
нулевая копия
В широком смысле нулевое копирование означает, что центральному процессору не нужно потреблять ресурсы для копирования данных между памятью во время работы компьютера. Метод sendfile() в Linux и метод FileChannel.transferTo() в Java NIO реализуют функцию нулевого копирования, и Netty также реализует нулевое копирование, заключая метод FileChannel.transferTo() NIO в FileRegion.
Нулевая копия, о которой говорится в Netty, полностью находится в пользовательском режиме и больше склонна к оптимизации операций с данными. Netty позволяет нам объединять несколько фрагментов данных в целый фрагмент виртуальных данных, которые пользователи могут использовать без копирования данных.
Унифицированная коммуникационная модель
Традиционный API ввода-вывода JAVA должен использовать разные типы и методы при работе с различными транспортными протоколами, такими как: java.net.Socket и java.net.DatagramSocket, они не имеют одного и того же супертипа; новый API ввода-вывода Java и исходная блокировка IO API также несовместим;
Netty предоставляет унифицированный программный интерфейс API, который абстрагирует все операции связи «точка-точка» и может переключаться между различными реализациями передачи, настраивая всего несколько строк кода:
- Передача TCP/IP на основе NIO
- Передача TCP/IP на основе OIO
- Передача UDP/IP на основе OIO
- местная передача
модель события
Другими словами, мониторинг и обработка событий обеспечивают хороший способ обработки различных событий.
Общий процесс обработки показан на рисунке выше, а подробности будут представлены в следующей статье.
Преимущество Описание
Наконец, давайте поговорим о преимуществах: динамик Xiaoai F-код.
Были подготовлены две копии, в основном для благодарности друзьям «Официального аккаунта WeChat» и «Сообщества Nuggets».Каждая копия включает в себя 1 динамик xiaoai размера F и 1 динамик xiaoai mini размера F, в которых можно участвовать одновременно.
Код F для мобильного телефона Xiaomi происходит от английского слова «Друг». Это право преимущественной покупки, предоставляемое Xiaomi основным пользователям Xiaomi и пользователям сети, которые внесли свой вклад в Xiaomi. Если у вас есть код Xiaomi F, вы можете использовать Xiaomi F Код напрямую без ожидания Покупайте сопутствующие товары!
Проще говоря, F-код означает, что вам не нужно его брать, вы можете купить его напрямую~
Крайний срок розыгрыша
9 апреля в 12.00
Правила розыгрыша
Сообщество самородков
-
Вы должны подписаться на мою учетную запись Nuggets, чтобы быть эффективными.Домашняя страница;
-
Используйте лотерейный помощник WeChat, чтобы случайным образом разыграть розыгрыш для сообщества Nuggets;
Публичный аккаунт WeChat
-
Вам нужно обратить внимание на мой публичный аккаунт WeChat, чтобы быть эффективным;
-
Используйте помощника по лотерее WeChat, чтобы случайным образом выбрать общедоступную учетную запись WeChat;