многопоточность -Использование ЦП в C#

Моя программа использует предопределенное количество потоков, каждый из которых выполняет независимую работу. Я использую процессор i7 -2600, но я отключил модуль потоков Hyper -, чтобы он запускал 4 потока на 4 ядрах. Когда я запускаю программу с 1 потоком, загрузка ЦП составляет 25%, что идеально, поскольку 1 поток используется полностью, но когда я запускаю 4 или 3 потока, я получаю только 60% ЦП, почему?

Как я упоминал ранее, потоки полностью независимы (нет блокировок и конфликтов )также, когда я запускаю программу 4 раза с 1 потоком, я получаю 100% загрузку ЦП (, т.е. когда это 4 процесса из 1 потока для каждого процесса я получаю правильное использование ЦП)

Есть идеи?

подробнее:

  1. Я не использую ввод-вывод, при обработке все необходимые данные загружаются в память, каждый поток загружает свои данные перед обработкой.
  2. Я загружаю данные из базы данных (с помощью oleDb ), но проблема, которую я описываю, возникает после загрузки, когда все потоки обрабатываются (загрузка не выполняется ).
  3. Цифры следующие::
    • 2 потока около 40% вместо 50 (85% для каждого потока ).
    • 3 витка вокруг 50 % вместо 75 (65 % на каждый виток ).
    • 4 потока около 60 % вместо 100 (60 % для каждого потока ).
  4. Я использую i7 2600 с 16 ГБ памяти, но использование памяти в этом процессе не приближается к этому.
  5. Я запустил монитор производительности Windows, чтобы проверить наличие конфликтов.
15
задан Roey Nissim 24 April 2012 в 08:03
поделиться