1

Выход из WMIC:

C:\Users\fra>WMIC CPU Get DeviceID,NumberOfCores,NumberOfLogicalProcessors
DeviceID  NumberOfCores  NumberOfLogicalProcessors
CPU0      4              8

C:\Users\fra>

Это говорит мне, что у меня есть 4 ядра и 8 процессоров. Что касается разработки Java-приложений, сколько одновременно выполняемых потоков выполняется? Если я начну 32 потока, которые являются долго выполняющимися задачами, все ли они будут выполняться одновременно?

Процессор это:

Intel i7-4800MQ CPU @2.70GHz

1 ответ1

2

Краткий ответ: может быть, и отчасти.

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

Если приложение имеет длительные периоды ожидания, тогда 32 потока могут быть легко загружены в память и запущены одновременно, практически не влияя на производительность, что, я полагаю, действительно является вопросом. Если бы было создано 32 потока с интенсивными вычислениями, более длинные рабочие циклы по сравнению с более короткими циклами ожидания могли бы устранить иллюзию одновременной работы.

Надеюсь, если ваша цель - 32 потока, у вас есть причина выбрать это число, и оно будет динамичным для дальнейшего развития. Один процессор может хорошо обрабатывать 32 потока, другой может захлебнуться, и через 5-10 лет 32 потока могут быть меньше, чем один поток на физическое ядро. В любом случае, тестирование приложения с 4, 8, 16 и 32 потоками, чтобы определить, какая работа завершается быстрее всего в вашем приложении, было бы лучше всего проверить, хорошо ли масштабируется рабочая нагрузка до вашей цели - 32 потока.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .