Я намерен использовать Netty в предстоящем проекте. Этот проект будет действовать как клиент и сервер. В частности, он будет устанавливать и поддерживать множество соединений с различными серверами и одновременно обслуживать своих клиентов.
Теперь документация для NioServerSocketChannelFactory довольно точно определяет модель потоков для серверной части вещей - для каждого связанного порта прослушивания потребуется выделенный поток босса на протяжении всего процесса, в то время как подключенные клиенты будут обрабатываться неблокирующимся образом в рабочих потоках. В частности, один рабочий поток сможет обрабатывать несколько подключенных клиентов.
Однако документация для NioClientSocketChannelFactory менее конкретна. Это также, по-видимому, использует как босс, так и рабочие потоки. Однако в документации указано:
Один NioClientSocketChannelFactory имеет один поток босса. Он делает попытку подключения по запросу. После успешной попытки подключения поток босса передает подключенный Канал одному из рабочих потоков, который управляет NioClientSocketChannelFactory.
Рабочие потоки, похоже, функционируют так же, как и для сервера.
Мой вопрос в том, означает ли это, что для каждого подключения из моей программы на внешний сервер будет один выделенный поток босса? Как будет эта шкала, если я установлю сотни или тысячи таких соединений?
Как примечание. Существуют ли какие-либо неблагоприятные побочные эффекты для повторного использования одного Исполнителя (пула кэшированных потоков) в качестве обозревателя босса и исполнителя-исполнителя для ChannelFactory? Как насчет повторного использования между различными экземплярами клиента и/или сервера ChannelFactory? Это несколько обсуждается здесь, но я не нахожу эти ответы достаточно конкретными. Может ли кто-нибудь уточнить это?