1

Я наблюдаю очень странную проблему в приложении клиентского сервера 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) {} 

    } 
} 

ответ

3

У вас есть письменные задания, которые выполняются в течение определенного количества времени, а не фиксированной суммы работы. Это означает, что они должны всегда выполняться с фиксированной скоростью независимо от количества процессоров, которые у вас есть. Вы могли бы просто спать на 100 мс.

Как 4 процессора и 80 потоков выполняют 80 заданий в 100 миллисекунд за одну секунду?

На вашем компьютере работает гораздо больше потоков, чем у вас есть процессы все время. Операционная система использует планирование, чтобы остановить и начать нить (быстрее, чем вы можете видеть), чтобы создать иллюзию, они все работает сразу, но они не являются и никогда не может (и не может, если вы об этом думаете)

Кроме того, ядра могут обрабатывать до четырех одновременных потоков, что повышает производительность и ресурсоемкость процессора.

Его означает, что это два ядра имеют Hyper Threading позволяет процессору работает до четырех потоков без переключения контекста (как упоминалось выше)

ли это означает, что 8 потоков может работать в то же время б 2 сердечники?

i5 У упомянутого 2 сердечника он поддерживает 4 потока, как он утверждает.

+0

Вы сказали: «Вы написали задачи, которые выполняются в течение определенного количества времени, а не фиксированный объем работы. Это означает, что они должны всегда заполняться с фиксированной скоростью, независимо от количества процессоров, которые у вас есть». Я не мог этого понять. Это означает, что одна система cpu даст такую ​​же пропускную способность? –

+0

@FaisalBahadur правильный. Наверное, я слишком долго работал с компьютерами, но я не понимаю, что вы ожидаете, что будет иначе. –

+0

@FaisalBahadur Вместо этого я бы ожидал, что вопрос будет; почему, когда я увеличиваю количество задач, я вижу, что это занимает немного больше времени. то есть имеет значение немного, сколько потоков вы читаете, особенно если вы заняты, чтобы ждать, а не спать. –

Смежные вопросы