Медленные соединения обычно не влияют на потоки Netty в NIO (см. Примечание об обновлении).
Некоторые замечания о внутренних потоках сервера Netty
по умолчанию будет только один поток Босса на порт сервера, и это
примет соединение и передаст соединение работнику
нить.
, если быть точным: WORKER_SIZE - это максимальное количество NioWorker
runnables сервер может иметь. например, если сервер имеет
только одно соединение, тогда будет 1 рабочий поток. Если число соединений увеличивается, и оно не может быть назначено следующему работнику (активные соединения> WORKER_SIZE), тогда соединения будут назначаться работнику в циклическом порядке.
Если размер пула рабочих потоков ввода-вывода (по умолчанию 2 * число процессоров) можно задать из CODE-1, для чего нужно добавить исполнитель (пул потоков) в конвейер в CODE-2?
Если ваши исходные задачи блокируются, вам следует выполнять их в отдельном пуле потоков с помощью обработчика выполнения. В противном случае чтение / запись Nio не будет работать вовремя (задержка?). Я думаю, что наличие обработчика выполнения поможет уменьшить задержку, чем установка большого значения в WORKER_SIZE.
Операции ввода-вывода выполняются из рабочих потоков. Означает ли это, что клиент с медленным подключением или плохой сетью поддерживает рабочий поток ввода-вывода до полной отправки данных? Если это так, увеличение WORKER_SIZE поможет мне предотвратить задержки?
Вообще говоря, увеличение WORKER_SIZE> = число процессоров * 2 не помогает, потому что,
NIO не является блокирующим, и, если я не ошибаюсь, его ЦП интенсивен. Для ЦП с интенсивной нагрузкой ЦП * 2 выбирается в основном количество потоков.
Update
NioWorker запускает цикл с selector.select (500 мс) для получения OP_READ, selector.select с таймаутом на блокирующий вызов, и, если большинство соединений медленные, производительность может снизиться? Вы можете уменьшить время ожидания в org.jboss.netty.channel.socket.nio.SelectorUtil.java и протестировать.