Потоки - это относительно дорогие системные ресурсы.Например, каждому потоку нужна память для стека вызовов.Сколько это зависит, зависит от операционной системы, но обычно это что-то вроде 1 или 2 МБ.Это означает, что запускать тысячи потоков - не очень хорошая идея - вы тратите 1 или 2 ГБ памяти только на стеки вызовов, состоящие из 1000 потоков.
Итак, для более эффективной работы вы хотите ограничить количествопотоков, например, используя пул потоков для обработки работы.Пул потоков позволяет управлять количеством используемых потоков.
Однако представьте, что у вас будет пул потоков с 10 потоками, а затем поступит 10 запросов. Каждый из ваших потоков будетбыть зарезервирован для обработки запроса.Пока они заняты, вы не можете обработать запрос № 11, потому что нет свободных потоков.Когда вы используете блокирующий ввод / вывод, то, хотя все ваши 10 потоков ничего не делают (ожидая завершения ввода / вывода), запрос № 11 не может быть обработан ...
Когда вы используете неблокируя ввод / вывод, потокам никогда не нужно будет ждать ввода / вывода - поэтому, когда запрос обработки №3 приостанавливается, потому что ему нужен результат операции ввода / вывода, поток, который его обрабатывал, может временно переключиться на обработку других запросов.
Таким образом, при неблокирующем вводе / выводе у вас никогда не будет ожидающих потоков и вы используете системные ресурсы более эффективно.
Это будет работать только в том случае, если вы используете неблокирующий ввод / вывод.O от передней к задней части вашей системы.Если на бэкэнде вы используете JDBC, который является блокирующим API, вы потеряете все преимущества неблокирующего ввода-вывода.
Поэтому, если у вас есть база данных на бэк-сервереВ конце концов, это работает лучше всего, если у вас есть БД, которая поддерживает неблокирующий ввод / вывод.Некоторые базы данных NoSQL, такие как MongoDB, поддерживают это, а для некоторых реляционных баз данных доступны специальные драйверы / API, которые поддерживают это.В этом случае вы не будете использовать JDBC, потому что JDBC является по сути блокирующим API.
Oracle работает над новым API для реляционных баз данных, предварительно называемым ADBA , который позволит вам сделатьнеблокирующий / асинхронный ввод-вывод с реляционными базами данных, но он еще не готов.