«System Idle Process» загружает процессор в приложении с высоким потоком - PullRequest
1 голос
/ 12 мая 2011

У меня есть многопоточное веб-приложение с примерно 1000 ~ 2000 потоков в производственной среде.

Я ожидаю использования ЦП на w3wp.exe, но System Idle Process загружает ЦП.Почему?

Ответы [ 4 ]

4 голосов
/ 12 мая 2011

Процесс простоя на самом деле не является реальным процессом, он не «съедает» ваше процессорное время. % CPU, который вы видите рядом с ним, фактически не используется% CPU (более или менее).

Причиной низкой производительности вашего приложения, скорее всего, являются 2000 потоков. Windows (или любая другая операционная система) никогда не предназначалась для одновременного запуска такого количества потоков. Вы тратите большую часть времени, просто переключаясь между ними, каждый из которых получает пару миллисекунд времени обработки каждые ~ 30 секунд (15 мс * 2000 = 30 с !!!!).

Переосмыслите вашу заявку.

1 голос
/ 12 мая 2011

Вы не предоставили много подробностей, поэтому я могу только строить догадки на данный момент. Я бы сказал, что большинство этих тем ничего не делают. Те, кто что-то делают, вероятно, связаны с IO, что означает, что они тратят большую часть времени на ожидание ответа внешнего ресурса.

Теперь поговорим о «1000 ~ 2000 потоков». Есть очень мало случаев (может быть, ни одного), когда иметь такое количество потоков - хорошая идея. Я думаю, что ваша текущая проблема - прекрасный пример того, почему. Большинство из этих потоков (по-видимому, в любом случае) ничего не делают, кроме траты ресурсов. Если вы хотите обрабатывать несколько задач параллельно, особенно если они связаны с вводом-выводом, лучше воспользоваться объединенными ресурсами, такими как ThreadPool или с помощью Task Parallel Library .

1 голос
/ 12 мая 2011

System Idle Process не реальный процесс, он представляет неиспользуемое время процессора.

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

1 голос
/ 12 мая 2011

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

...