Вот вот суть того, что я понял на данный момент (пожалуйста, поправьте меня, если я ошибаюсь!):
- ЦП имеет физическое ядро и логическое ядро. Логическое ядро по сути представляет собой физическое ядро * количество потоков, которые могут выполняться на каждом ядре.
- В Java используется модель запроса на поток, поэтому для каждого запроса потребуется 1 из этих логических ядер
- li>
Следовательно, если процессор имеет 8 логических ядер, jvm может запускать 8 процессов параллельно (не одновременно!) - Параллелизм называется процесс, в котором одно логическое ядро может обрабатывать несколько запросов; предположим, что запрос будет выполнять блокирующий вызов ввода-вывода, а не ждать вызова ввода-вывода, поток можно освободить и использовать для обработки другого запроса. вот что значит быть одновременно
Теперь я думаю, именно здесь это сбивает с толку.
Предположим, у меня есть 8 логических ядер и сервер Spring Web MVC, который может принимать вызов API. В этом вызове API мы будем выполнять бесконечную операцию блокировки ввода-вывода
Значит ли это, что
- Я могу нажать максимум 8 раз прежде чем другой запрос будет поставлен в очередь/отложен, поскольку все потоки используются?
- Я могу нажать максимум 4 раза, прежде чем другой запрос будет поставлен в очередь/задержан, поскольку все потоки используются? (4 основных потока, 4 из блокирующего вызова ввода-вывода)
Код: Выделить всё
x = CompletableFuture.supplyAsync(() -> {
// Long I/O call
})
// do some operation
x.join();
- После части SupplyAsync процесс будет продолжаться до тех пор, пока мы перейдите в x.join(); во время ожидания x.join() поток будет блокироваться? или поток освободится и произойдет переключение контекста, чтобы поток можно было использовать для обслуживания другого запроса?
Что касается вопроса номер 3, я предполагаю, что как только мы доберемся до блокирующей части кода (.get() для Future / .join() completableFuture) поток будет освобожден и сможет обработать другой запрос.
Примечание: извините за мой плохой английский!
Подробнее здесь: https://stackoverflow.com/questions/784 ... oncurrency
Мобильная версия