Подтвердить что ты не робот

Как Netty использует пулы потоков?

Не могли бы вы объяснить, как Netty использует пулы потоков для работы? Правильно ли я понимаю, что существует два типа потоков: босс и рабочий. Boss используются для ввода-вывода, а рабочий используется для вызова пользовательских обратных вызовов (messageReceived) для обработки данных?

4b9b3361

Ответ 1

Это из документа NioServerSocketChannelFactory

A ServerSocketChannelFactory, который создает серверную NIO-основанную ServerSocketChannel. Он использует неблокирующий режим ввода-вывода, который был с NIO для обслуживания многих количество параллельных соединений эффективно.

Как работают потоки Существует два типа потоков в NioServerSocketChannelFactory; один нить босса, а другая - работник нить.

Босс-темы
Каждая связанная У ServerSocketChannel есть собственный босс нить. Например, если вы открыли два серверных портов, таких как 80 и 443, вы будет иметь два босса. Босс поток принимает входящие соединения пока порт не будет отключен. Когда соединение принято успешно, поток босса проходит принятый Канал к одному из рабочих потоков что NioServerSocketChannelFactory управляет.

Рабочие потоки
Один NioServerSocketChannelFactory может иметь один или несколько рабочих потоков. Рабочий нить выполняет неблокирующее чтение и пишите для одного или нескольких каналов в неблокирующий режим.

В модели Nio bossThread заботится обо всех ограниченных сокетах (слуховой сокет), workThread заботится о приёмном сокете (включая метод ввода-вывода и метод вызова, например messageReceived).

Ответ 2

Описание, связанное с реализацией Netty Nio (3.2.4.Final) NioServerSocketChannelFactory.

Пул рабочих потоков должен иметь возможность доставлять по меньшей мере количество рабочих потоков (в настоящее время по умолчанию 2 * количество ядер).

Почему?

В случае этой реализации каждый рабочий имеет свой собственный цикл выбора, это означает, что каждый рабочий "съедает" один поток, чтобы спать на селекторе. Кроме того, рабочий (и связанный поток) отвечает за выполнение всех фактических операций записи и чтения (в том числе события пожара в конвейере, что означает, что обработчики выполняются в этом рабочем потоке).

В случае пула потоков boss на самом деле пул потоков не нужен, поскольку текущая реализация получает от него только один поток. Этот поток чаще всего сется на селекторе для серверного сокета, после принятия соединения, которое соединение зарегистрировано у рабочего. С этого момента работник несет ответственность за обслуживание этого соединения.