Что происходит с каналами, когда достигается канал или общее пороговое значение MemoryAwareThreadPoolExecutor? MemoryAwareThreadPoolExecutor устанавливается в ExecutionHandler, который находится на каждом конвейере до обработчика ввода-вывода.
Мое текущее состояние информации:
Я нашел: channel.setReadable(false)
называется. Это означает, что все операции чтения на всех каналах остановлены, верно? То есть входящие данные не будут доставлены ни в один конвейер?
Когда я понял все правильно, вы должны разделить свой код в конце конвейера на неблокирующий бизнес-обработчик и блокирующий бизнес-обработчик с обработчиком выполнения перед блокирующим.
Пример: -> Декодер, Кодирование, NonBlockingHandler, ExecutionHandler, I-O-Handler
Вот где я думаю, что было бы лучше получить сообщения по крайней мере до последнего обработчика перед обработчиком выполнения. Если я прав, то сообщения, которые не должны обрабатываться обработчиком ввода-вывода, не попадут в NonBlockingHandler, пока поток-пул обработчика выполнения снова не опустится ниже порогового значения.
Я допускаю, что это не гарантирует выполнение сообщений в полученном порядке на канал. Но давайте просто предположим, что в этом нет необходимости.
С наилучшими пожеланиями и поздравлениями Нетти!