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