Основным преимуществом Netty по сравнению с простым чтением и записью в сокеты с использованием потоков является то, что Netty поддерживает неблокирующий, асинхронный ввод / вывод (с использованием Java NIO API);когда вы используете потоки для чтения и записи из сокетов (и запускаете новый поток для каждого подключенного соединения, принятого с ServerSocket
), вы используете блокирующий синхронный ввод / вывод.
Подход Netty масштабируется гораздо лучше,что важно, если ваша система должна обрабатывать много (тысячи) соединений одновременно.Если вашей системе не нужно масштабировать до нескольких одновременных подключений, возможно, не стоит использовать такую среду, как Netty.
Еще немного справочной информации: потоки - это относительно дорогие ресурсы в операционной системе.Каждому потоку нужна память для стека (размер которого может составлять, например, 2 МБ).Когда вы создаете тысячи потоков, это будет стоить много памяти;Кроме того, операционные системы имеют ограничения на количество потоков, которые могут быть созданы.Таким образом, вы не хотите начинать новый поток для каждого принятого соединения.Идея асинхронного ввода / вывода состоит в том, чтобы отделить потоки от соединений (без отношения один к одному).Соединений может быть намного больше, чем потоков, и всякий раз, когда какое-либо событие происходит на одном из соединений (например, данные получены), поток из пула потоков временно используется для обработки события.