В последнее время я начал изучать reactive
, event-driven
, неблокирующие Java-фреймворки, и есть тот, который попался мне на глаза - vert.x
.vert.x и BIO threading
Я думаю, тот же вопрос может относиться к Акку (Play каркасных) потому что их философии или одной из целей является то же самое - и это сокращение числа потоков и, следовательно, highering масштабируемости приложения.
vert.x
предполагает, что количество потоков, которое он потребляет, эквивалентно количеству ядер ЦП, но также имеет в виду, что иногда вам приходится выполнять операцию блокировки, поэтому он побуждает разработчика выполнять операцию блокировки на отдельной рабочей нить (рабочий вертикаль в терминах vert.x).
И вот, когда мы пришли на мой вопрос:
- , если я должен выполнять блокирование операций ввода-вывода на новый отдельный поток, который означает, что каждый пользователь, который делает операцию блокировки имеет новую тему и, следовательно, число потоков снова становится равным числу пользователей, как в классической модели потоков блокировки?
Настоящим примером может служить запрос JDBC - если 1000 одновременных пользователей запрашивают базу данных SQL через JDBC, каждый пользователь порождает собственный рабочий поток для этой операции блокировки. С моей точки зрения, нет никакой экономии нити, улучшенной масштабируемости или экономии памяти по сравнению с классической моделью блокировки потоков. Я должен что-то упустить ... Или нет? Спасибо за все ответы.
Выровнять количество потоков в пуле потоков с размером пула соединений JDBC. –