Что именно возвращает Runtime.getRuntime(). availableProcessors()?

Мой процессор — процессор Intel® Core™ i7-3610QM (6 МБ кэш-памяти, 2,30 ГГц), который имеет 4 процессорных ядра и 8 потоков (что именно это должно означать?). Я запускаю простую программу Java, чтобы узнать количество «процессоров, доступных для виртуальной машины Java». (API от Oracle, Java 7), который у меня возвращает 8, а не 4. Может кто-нибудь объяснить, почему так?

Вот простой код Java:

public class MyTest {
    public static void main(String args[]) {
        System.out.println("Number of cores available : " + Runtime.getRuntime().availableProcessors());
    }
}

person Ivaylo Toskov    schedule 10.12.2013    source источник


Ответы (1)


Это больше аппаратный вопрос ИМО.

Ваш процессор состоит из четырех физических ядер плюс нечто, называемое «Hyper-Threading», что, по сути, означает «сообщить системе, что у вас действительно восемь ядер, даже если у вас их четыре». По словам Intel, это приводит к повышению производительности на 10-20% по сравнению с простым выражением в виде четырех ядер.

То, что вы видите, это то, что видит ОС: восемь ядер. Физически это четыре ядра плюс гиперпоточность.

Возможно, вы захотите увидеть этот ответ на аналогичный вопрос, в котором говорится:

Количество процессоров — это, по сути, количество исполнительных механизмов, способных выполнять ваш код. Один из вариантов i5 — это 4-ядерный процессор серии i5-7. Это могут быть физически разные процессоры (даже если они находятся внутри одного чипа) или они могут быть логическими процессорами, когда вы используете гиперпоточность.

person ashes999    schedule 10.12.2013
comment
Hyerthreading — это больше, чем просто подделка количества ядер. Во внешнем интерфейсе архитектуры есть некоторая реальная логика, которая позволяет быстрее переключать контекст. - person Marko Topolnik; 10.12.2013
comment
@MarkoTopolnik, это хороший момент. Я не думаю, что фактические детали уместны здесь, хотя. - person ashes999; 10.12.2013