Концепция потока JVM и отношение к потоку ОС - PullRequest
3 голосов
/ 22 февраля 2020

Вот мое фундаментальное понимание процессора и потоков (наивно!). Процессор может работать по одному потоку на ядро.
Информация о системе на моем ноутбуке читается, как показано ниже
Процессор Intel® Core ™ (I )-8650U CPU @ 1,90 ГГц, 2112 МГц, 4 ядра (-ей), 8 логических процессоров ** могут запускать 8 потоков параллельно **
Для подтверждения моего понимания я создаю Spring Boot (встроенный tomcat) для обработки каждого запроса

@GetMapping("/ping")
public String ping(@RequestParam String id) throws InterruptedException {
System.out.println(MessageFormat.format("The request id is {0}", id));
int i = Integer.parseInt(id);
long now = System.currentTimeMillis();
long period = 5000L;
long later = System.currentTimeMillis();
if (i % 2 == 1) {
  while (later - now <= period) {
    later = System.currentTimeMillis();
  }
}
return PING_SUCCESSFUL;

}

Я также установил максимальное количество потоков на tomcat следующим

server.tomcat.max-threads = 200

Теперь я использую Apache JMeter для инициировать 200 запросов в течение 1 секунды

Я ожидаю, что моя система ограничена для запуска только 8 потоков, и, следовательно, общее время выполнения запросов должно быть не менее (200/8) * 5 = 125 секунд
Однако даже 125 секунд не реализуются c, поскольку в моей системе работают другие приложения, такие как Browser, JMeter, IntelliJ, которые должны учитывать некоторые потоки.

Я наблюдаю контрастное поведение - общее время выполнения составляет 5 секунд . Как это возможно для системы, чтобы запустить больше потоков, чем предел? (я нахожу некоторое понимание в отношении потоков и того, как нижележащие процессоры, кажется, парализуют потоки)

1 Ответ

5 голосов
/ 22 февраля 2020

Это правда, что система может запускать только 8 потоков одновременно, но операционная система планирует, какой из восьми работает в любой момент времени, и может одновременно выгружать и квант времени процессы для планирования других (ожидающих) процессов в течение некоторой части времени. Java потоки изоморфны c для собственных потоков, так что буквально операционная система планирует их (и если ваш компьютер работает так, как вы думали, сеть перестанет работать во время работы вашей программы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...