2013-02-11 4 views
2

Когда мое приложение asp.net запускается, я получил около 40 потоков, связанных в процессе. Это нормально? Извините за вопрос noob. Фактические потоки (состояние) зависят от ядра моей машины. Например, при запуске в 4-х ядрах p, im получает около 1-4 текущих потоков (параллельно), а общее количество потоков в процессе составляет около 38-42. При запуске приложения на 24 ядрах, я все равно получаю около 38-42 потоков.Являются ли эти количества потоков в процессе нормальными?

Мой код для получения количества запущенных потоков:

((IEnumerable)Process.GetCurrentProcess().Threads) 
       .OfType<System.Diagnostics.ProcessThread>() 
       .Where(t => t.ThreadState == System.Diagnostics.ThreadState.Running) 
       .Count() 

код для получения общего числа нитей:

Process.GetCurrentProcess().Threads.Count 

Может кто-то пожалуйста, объясните это нуб как я ..

Заранее спасибо.

+0

Кроме того, иногда я получаю около 90 потоков, связанных в процессе во время пика параллельных задач в 24-ядерной машине. Но после завершения длительной параллельной обработки число потоков будет возвращаться примерно к 42. – hisoka21

+2

Ваш CurrentProcess - IIS. И да, для IIS нормально иметь горстку потоков как минимум. –

+0

Привет Хенк! Спасибо за быстрый ответ. Вы имеете в виду, что общее количество потоков, которые я получаю с использованием вышеуказанного кода, генерируется не только моим приложением? – hisoka21

ответ

2

Ваш сайт ASP.NET работает в Application Pool, который будет иметь определенное количество потоков и может появиться больше, если потребуется. Каждый запрос обрабатывается в отдельном потоке, поэтому IIS будет поддерживать некоторые потоки, ожидающие запроса, потому что быстрее использовать существующий поток, чем при необходимости запускать новый.

IIS также будет иметь запасные потоки в Thread Pool для вашего приложения.

Так что, да, для IIS нормально иметь несколько потоков.

+0

Hi Ilari Mäkimattila, что я не понимаю, так это то, что если в моем текущем процессе около 40 потоков, почему количество потоков увеличивается до 90 потоков, если на моей машине всего 24 ядра. Является ли 40 потоков недостаточно для 24 потоков (ядер)? Почему Ivy threadpool продолжает создавать новые потоки? – hisoka21

+1

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

Смежные вопросы