Как работает потоковая модель Netty в случае множества клиентских соединений?

Я намерен использовать Netty в предстоящем проекте. Этот проект будет действовать как клиент и сервер. В частности, он будет устанавливать и поддерживать множество соединений с различными серверами и в то же время обслуживать собственных клиентов.

Итак, документация к NioServerSocketChannelFactory достаточно хорошо определяет потоковую модель для серверной части вещей - каждый связанный порт прослушивания будет требовать выделенного boss потока на протяжении всего процесса, в то время как подключенные клиенты будут обрабатываться неблокирующим образом на worker потоках. В частности, один рабочий поток сможет обрабатывать несколько подключенных клиентов.

Однако документация по NioClientSocketChannelFactory менее конкретна. Похоже, что здесь также используются оба потока boss и worker. Однако в документации сказано:

Один NioClientSocketChannelFactory имеет один поток boss. Он выполняет попытку соединения по запросу. Как только попытка соединения успешна, главный поток передает подключенный канал одному из рабочих потоков, которыми управляет NioClientSocketChannelFactory.

Рабочие потоки, похоже, функционируют так же, как и в случае с сервером.

Мой вопрос в том, означает ли это, что для каждого соединения моей программы с внешним сервером будет выделен один поток boss? Как это будет масштабироваться, если я установлю сотни или тысячи таких соединений?

В качестве побочного примечания. Есть ли какие-либо негативные побочные эффекты при повторном использовании одного исполнителя (пула кэшированных потоков) в качестве bossExecutor и workerExecutor для ChannelFactory? Как насчет повторного использования между различными клиентскими и/или серверными экземплярами ChannelFactory? Это в некоторой степени обсуждается здесь, но я не нахожу те ответы достаточно конкретными. Кто-нибудь может рассказать об этом подробнее?

28
задан Elliot Vargas 30 March 2015 в 20:36
поделиться