Ответ 1
Асинхронная модель сервлета вводит границу асинхронности между потоками контейнера (1 запрос/модель сервлетов) и обработку запроса в вашем приложении. Обработка может произойти в другом потоке или ждать. В конце концов, вам нужно отправить обратно в контейнерный поток и прочитать/записать блокирующим способом (InputStream
и OutputStream
по сути блокируют API).
С этой моделью вам нужно много потоков для достижения параллелизма (потому что многие из них могут быть заблокированы в ожидании ввода-вывода). Это стоит ресурсов, и это может быть компромисс, в зависимости от вашего варианта использования.
С неблокирующим кодом вам нужно всего несколько потоков для обработки множества запросов одновременно. Это другая модель параллелизма; как и любая модель, есть преимущества и компромиссы с ней.
Для получения дополнительной информации об этом сравнении интерес к этому вопросу должен представлять разговор с сервлетами и реактивными столами.