Вот мое фундаментальное понимание процессора и потоков (наивно!). Процессор может работать по одному потоку на ядро.
Информация о системе на моем ноутбуке читается, как показано ниже
Процессор 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 секунд . Как это возможно для системы, чтобы запустить больше потоков, чем предел? (я нахожу некоторое понимание в отношении потоков и того, как нижележащие процессоры, кажется, парализуют потоки)