#concurrency #netty #pipelining
#параллелизм #netty #конвейерная обработка
Вопрос:
У меня есть приложение Netty 4, которое получает сообщения с высокой пропускной способностью, используя одно сетевое соединение (или, если быть точным, одну группу многоадресной рассылки IP), поэтому обработка всех обработчиков каналов в конвейере в основном однопоточная.
Есть ли способ настроить Netty для распараллеливания обработки, чтобы использовалось более 1 ядра? Я имею в виду «шаблон конвейерной обработки» многопоточности, известный как синхронный параллелизм. Встроено ли что-то подобное — или мне придется реализовать это самому, вне конвейера Netty?
Ответ №1:
Вы можете добавить в конвейер разные обработчики с разными EventLoopGroup
s. Таким образом, вы можете выполнять разгрузку в разные потоки. Тем не менее, вам, возможно, придется быть осторожным с точки зрения заказа (в зависимости от протокола).
Комментарии:
1. Спасибо, Норман. Не уверен в ваших предупреждениях относительно упорядочения. Вы хотите сказать, что сообщения могут приходить в другом порядке в конце конвейера? В этом случае, я думаю, я просто
new NioEventLoopGroup(1)
для каждого обработчика. Поскольку у меня есть только одно «соединение», это не должно повредить мне с точки зрения производительности, но это гарантирует, что элементы не смогут обогнать другие, верно? (Но я не знаю, является лиNioEventLoopGroup
это правильной реализацией для специфичных для каналаEventLoopGroup
s …)2. Возможно, какой-то потомок
SingleThreadEventLoop
был бы лучше — есть ли где-нибудь пример групп циклов событий, специфичных для обработчика, на которые я могу сослаться?