Я наблюдаю очень странную проблему в приложении клиентского сервера java. Я отправляю следующие объекты Runnable на сервер с 80 запросами в секунду. Пул потоков сохраняет размер пула равным скорости запроса, то есть примерно 80 потоков в пуле. Мой ноутбук intel Core i5-3230M двухъядерный (Windows показывает мне 4 процессора). Странно то, что пропускная способность (jos завершена в секунду) тоже 80. Я не мог этого понять. Как 4 процессора и 80 потоков выполняют 80 заданий в 100 миллисекунд за одну секунду? То есть:Пропускная способность пула потоков Java
Processors=4
Request rate=80
Thread pool size=80
Each job service time=100milliseconds.
Throughput=80 How?
Я ожидал, что пропускная способность = 40, так как каждый процессор должен примерно полных 10 рабочих мест в 1 секунду, 4 процессора должны дать пропускную способность = 40, но это 80? Спецификация ноутбука link говорит
Кроме того, стержни могут обрабатывать до четырех одновременных потоков, которые повышает производительность и ресурсосбережение использование ЦП.
Означает ли это, что 8 потоков могут работать одновременно b 2 ядра?
public class CpuBoundJob implements Runnable {
public void run() {
long startTime = System.nanoTime();
while ((System.nanoTime() - startTime) < (100)*1000000L) {}
}
}
Вы сказали: «Вы написали задачи, которые выполняются в течение определенного количества времени, а не фиксированный объем работы. Это означает, что они должны всегда заполняться с фиксированной скоростью, независимо от количества процессоров, которые у вас есть». Я не мог этого понять. Это означает, что одна система cpu даст такую же пропускную способность? –
@FaisalBahadur правильный. Наверное, я слишком долго работал с компьютерами, но я не понимаю, что вы ожидаете, что будет иначе. –
@FaisalBahadur Вместо этого я бы ожидал, что вопрос будет; почему, когда я увеличиваю количество задач, я вижу, что это занимает немного больше времени. то есть имеет значение немного, сколько потоков вы читаете, особенно если вы заняты, чтобы ждать, а не спать. –