Неблокирующий ввод-вывод следует использовать, когда вы можете обработать запрос, отправить его для обработки в каком-то другом контексте выполнения (другой поток, вызов RPC на другой сервер, какой-то другой механизм асинхронизации) и освободить поток веб-сервера для обработки большего количества запросов. входящие запросы. Когда обработка ответа будет завершена, будет вызван поток обработки ответа, который отправит ответ клиенту.
Я бы рекомендовал прочитать netty документацию для лучшего понимания концепции.
Что касается более высокой пропускной способности: когда ваш сервер отправляет / получает большие объемы данных, все эти переключения контекста и передача данных между потоками могут действительно снизить общую производительность. Думайте об этом так: вы получаете большой запрос (запрос PUT с большим файлом). Все, что вам нужно сделать, это сохранить его на диск и вернуть ОК. Если начать перебрасывать его между потоками, это может привести к нескольким операциям копирования-записи, которые потребовались бы в случае, если вы просто выбросили его на диск в том же потоке. А асинхронное выполнение этой операции не улучшит производительность: хотя вы могли бы освободить поток обработки запросов обратно в пул потоков веб-сервера и позволить ему обрабатывать другие запросы, основным узким местом вашей производительности является дисковый ввод-вывод, и в этом случае - попытка одновременное сохранение большего количества файлов только замедлит процесс.
Надеюсь, я был достаточно ясен. Пожалуйста, не стесняйтесь задавать больше вопросов в комментариях, если вам нужно больше объяснений.