Как вы показываете загрузку процессора?
Если вы используете диспетчер задач, я предлагаю вам использовать Sysinternal Process Explorer. Это окно с информацией о системе, которое вы можете открыть, которое будет отображать загрузку всего процессора, или флажок, чтобы показать использование каждого ядра процессора.
Тот факт, что вы цитируете копирование CD и сжатие файлов как случаи, когда загрузка ЦП достигает 25%, позволяет мне предположить, что выполняемая вами задача ограничена одним ЦП. Например, сжатие файла имеет производительность, ограниченную двумя факторами:
- I/O (диск)
- Производительность процессора
Большая часть сжатия не может использовать преимущества нескольких ядер, потому что это по сути однопоточная задача. Таким образом, добавление параллельных процессоров не пойдет быстрее. И если вы посмотрите на загрузку процессора каждого ядра, вы увидите, что одно из них не работает, а остальные практически бездействуют. Теперь один на 100% и 3 на 0% дают в среднем около 25% - так что этот вид соответствует тому, что вы видите.
Точно так же копирование CD ограничено скоростью, с которой данные могут быть извлечены с CD, а затем тем, что вы делаете с ним. Если вы (например) преобразуете аудио в MP3 как часть разрыва, то это преобразование также в значительной степени однопоточное, что означает, что снова не будет использоваться несколько ядер ЦП (или ускорит выполнение всей работы). Ваш предел будет установлен либо скоростью чтения, либо скоростью одного процессора.
Это звучит, как причина, по которой вы видите 20% - 25% в том, что задания, в которых вы производите измерения, привязаны к одному ЦП, который работает практически без ошибок, остальные работают на холостом ходу, потому что выполняемые вами задачи не могут использовать несколько процессоры.
Чтобы увидеть, может ли общее использование процессора возрасти, вам нужно запустить задачи, которые могут использовать несколько процессоров. (Конечно, никто не говорит вам, делает ли их программа это или нет.)
Чтобы выделить вопрос, поднятый одним из других ответов, здесь: Некоторые проблемы поддаются параллелизму и, если программа (для этой проблемы) написана правильно, может использовать несколько процессоров. И некоторые проблемы не могут использовать такой параллелизм. Например, я уверен, что сжатие в стиле LZ, используемое во всех распространенных файлах zip-типа, использует CANT параллелизм, потому что алгоритм должен последовательно читать исходный файл, чтобы создать сжатый файл. Последовательная обработка, подобная этой, не может быть легко распределена по нескольким потокам (тогда потоки могут быть распределены между физическими процессорами).