Чи правильно я кажу, що для веб-додатків веб-контейнер піклується про багатопотоковість?
Більшість веб-серверів (Java та в іншому випадку, включаючи JBoss) дотримуються моделі "один потік на запит", тобто кожен HTTP-запит повністю обробляється точно одним потоком. Цей потік часто витрачає більшу частину часу на очікування таких речей, як запити БД. Веб-контейнер створить нові потоки за необхідності.
Деякі сервери (в екосистемі Java в першу чергу Netty ) виконують асинхронну обробку запитів, або за допомогою моделі «один потік робить все», або чогось більш складного. Основна ідея полягає в тому, що, маючи багато ниток очікування, витрачає ресурси, тому робота асинхронно може бути ефективнішою.
Якщо так, чи можна вводити нові протектори у веб-додатки?
Це можливо, але слід робити це дуже обережно, оскільки помилки (наприклад, витоки пам'яті або відсутність синхронізації) можуть спричинити помилки, які дуже важко відтворити, або збити весь сервер.
Чи є якась перевага в цьому і в якому сценарії потрібно було б це зробити?
Ну, перевага в тому, що ви можете робити речі паралельно. Використання потоків для покращення чистої обчислювальної швидкості - це те, що ви не повинні робити на веб-сервері, оскільки це уповільнить обробку інших запитів. Такі речі слід робити на окремому сервері, ймовірно, використовуючи якусь чергу завдань.
Правомірним сценарієм багатопотокової читання в контексті обробки HTTP-запиту може бути, якщо вам потрібно отримати доступ до інших мережевих ресурсів, наприклад, зателефонувати до декількох різних веб-служб. Якщо ви робите це в один тред, вам доведеться чекати, коли кожен дзвінок закінчиться по черзі. Але якщо ви використовуєте кілька потоків, загальний час очікування - це лише затримка одного найповільнішого виклику.
Concurrency Utilities
.