Ноль изобретательности Пожалуйста, указывайте первоисточник для перепечатки, спасибо!
путать
Все мы знаем био нио и нио2 (то есть аио), если не особо знакомы, то можете прочитать то, что я писал ранееМодель сети ввода / вывода, Тогда почему Netty часто видит этот код следующим образом?
EventLoopGroup ……= new NioEventLoopGroup();………… b.group(……).channel(NioSocketChannel.class)………………ChannelFuture f = b.bind(PORT).sync();
скопировать код
Мы знаем, что нельзя выбирать биомодель, так почему бы не выбрать модель aio? И выбрать режим nio? Над этим вопросом стоит подумать, и мне всегда было любопытно, потому что вМодель сетевого ввода/выводаПредставленный внутри, очевидно, AIO лучше, чем модель NIO.
Так почему же Netty по-прежнему является предпочтительной моделью NIO?
Краткое введение в некоторые компоненты Netty
В Netty EventLoop определяется таким образом.Эта статья не находится здесь в центре внимания, и мы продолжим знакомить с EventLoop позже.
Will handle all the I/O operations for a
Channel
once registered. OneEventLoop
instance will usually handle more than oneChannel
but this may depend on implementation details and internals.
В Netty EventLoopGroup определяется таким образом. В этой статье речь не идет об этом. Я продолжу представлять EventLoopGroup позже.
Special
EventExecutorGroup
which allows registeringChannel
s that get processed for later selection during the event loop.
Канал определяется таким образом в Netty.Эта статья не находится здесь в центре внимания.Я продолжу представлять Канал позже.
A nexus to a network socket or a component which is capable of I/O operations such as read, write, connect, and bind.
A channel provides a user:
the current state of the channel (e.g. is it open? is it connected?),
the configuration parameters of the channel (e.g. receive buffer size),
the I/O operations that the channel supports (e.g. read, write, connect, and bind), and
the
ChannelPipeline
which handles all I/O events and requests associated with the channel.
В Netty ChannelFuture определяется таким образом. В этой статье речь не идет об этом, я продолжу знакомить с ChannelFuture позже.
The result of an asynchronous
Channel
I/O operation.All I/O operations in Netty are asynchronous. It means any I/O calls will return immediately with no guarantee that the requested I/O operation has been completed at the end of the call. Instead, you will be returned with a
ChannelFuture
instance which gives you the information about the result or status of the I/O operation.A
ChannelFuture
is either uncompleted or completed. When an I/O operation begins, a new future object is created. The new future is uncompleted initially - it is neither succeeded, failed, nor cancelled because the I/O operation is not finished yet. If the I/O operation is finished either successfully, with failure, or by cancellation, the future is marked as completed with more specific information, such as the cause of the failure. Please note that even failure and cancellation belong to the completed state.
Реализация сетевой передачи предоставлена Netty
Примечание:Это отсылка к нетти боевым книгам.
Посмотрите на запись в RocketMQ, Когда серия netty будет завершена, RocketMQ продолжит ее анализ позже.
Примечание:
If you are running on linux you can use EpollEventLoopGroup and so get better performance, less GC and have more advanced features that are only available on linux.
epoll имеет два режима работы файловых дескрипторов — LT (режим горизонтального триггера по уровню) и ET (режим пограничного триггера по краю)
Короче говоря, LT — это режим работы epoll по умолчанию.Когда функция epoll_wait обнаруживает, что происходит событие, она уведомляет приложение, но приложение не обязательно должно обрабатывать его немедленно, поэтому функция epoll_wait также уведомляет приложение. когда она снова обнаружит это событие.программа,пока событие не будет обработано.
В режиме ET, пока функция epoll_wait обнаруживает событие, она уведомляет приложение о необходимости его немедленной обработки, и последующая функция epoll_wait больше не будет обнаруживать это событие. Таким образом, режим ET значительно снижает количество запусков одного и того же события epoll, поэтому эффективность выше, чем у режима LT.
Объясните, почему epoll по умолчанию LT (супер брат объяснил, я лично думаю, что это все еще очень хорошо)LT (триггер уровня): LT — это способ работы по умолчанию, который поддерживает как блочные, так и неблочные сокеты. При таком подходе ядро сообщает вам, готов ли файловый дескриптор, и вы можете выполнять операции ввода-вывода с готовым fd. Если вы ничего не сделаете, ядро будет продолжать уведомлять вас, поэтому ошибки программирования в этом режиме менее вероятны. Традиционный выбор/опрос является представителем этой модели.
Спасибо Brother Chao за предоставленный адрес: https://github.com/netty/netty/commit/9330172f803f340df677c370464126cd6112204a#diff-67591dfc9d4c7ea8dbe03ab24ff1669c, между EpollEventLoopGroup и NioEventLoopGroup есть небольшой разрыв. Добро пожаловать, чтобы продолжить оставлять сообщение для добавления.
Почему Netty удалила поддержку AIO?
По этому вопросу искал и нашел инструкцию на github: https://github.com/netty/netty/issues/2515.
Примечание:В общем, может поддерживать AIO Не быстрее, чем NIO (epoll) на unix системах (что правда) и соотношение цена/качество не высокое. пользователям просто звонить и использовать nio или aio для нижнего уровня.На самом деле, пользователю не нужно заботиться, если это быстро.
Из-за проблемы вашего уровня может быть много непонимания.Вы можете активно оставить сообщение и обсудить в области сообщений, спасибо. Мы продолжим обсуждение при удобном случае позже, AIO Не быстрее, чем NIO (epoll) в unix-системах (что верно). Почему это так? В настоящее время я все еще изучаю основные нетты в первую очередь, и я продолжу возвращаться к этой теме в будущем.
Если вы чувствуете себя вознагражденным после прочтения, пожалуйста, поставьте лайк, подпишитесь и добавьте официальную учетную запись [Ingenuity Zero], чтобы узнать больше захватывающей истории! ! !