Может ли Netty обрабатывать один конвейер несколькими потоками?

У меня есть приложение Netty 4, которое получает сообщения с высокой пропускной способностью, используя одно сетевое соединение (или, если быть точным, одну многоадресную группу IP), поэтому обработка всех обработчиков каналов в конвейере в основном однопоточная.

Есть ли способ настроить Netty для распараллеливания обработки, чтобы использовалось более 1 ядра? Я имею в виду шаблон конвейерной обработки многопоточности, также известный как синхронный параллелизм. Что-то подобное встроено или мне придется реализовать это самостоятельно, вне конвейера Netty?


person Evgeniy Berezovsky    schedule 07.12.2020    source источник


Ответы (1)


Вы можете добавить в конвейер разные обработчики с разными EventLoopGroup. Таким образом, вы можете разгрузить данные в разные потоки. Тем не менее, вам, возможно, придется быть осторожным с точки зрения заказа (в зависимости от протокола).

person Norman Maurer    schedule 08.12.2020
comment
Спасибо Норман. Не уверен насчет вашего предупреждения о заказе. Вы говорите, что сообщения могут выходить в другом порядке в конце конвейера? В этом случае, я думаю, я просто new NioEventLoopGroup(1) для каждого обработчика. Поскольку у меня только одно соединение, это не повредит мне с точки зрения производительности, но гарантирует, что элементы не смогут обогнать другие, верно? (Но я не знаю, является ли NioEventLoopGroup правильной реализацией для конкретных каналов EventLoopGroups...) - person Evgeniy Berezovsky; 09.12.2020
comment
Возможно, какой-то потомок SingleThreadEventLoop был бы лучше - есть ли где-нибудь пример групп циклов событий, специфичных для обработчика, на которые я могу ссылаться? - person Evgeniy Berezovsky; 09.12.2020