Как использовать свободное время процессора в пуле приложений IIS? - PullRequest
4 голосов
/ 13 июля 2010

У меня есть веб-сайт на C # / ASP.NET на базе IIS 6.0 с серверной частью SQL. Я хочу генерировать некоторые вычислительно дорогие отчеты (сводки, индексы поисковых систем и т. Д.) Во время простоя ЦП. Мне нужно, чтобы отчеты создавались из пула приложений IIS, чтобы он знал правильные параметры конфигурации и (труднее исправить) избегал кошмарных ограничений безопасности, на которые я наложил.

Могу ли я запустить потоки внутри процесса AppPool, которые не будут связывать процессор, чтобы он мог продолжать беспрепятственно обслуживать запросы? Если так, то как? Какой код и библиотеки?

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

[EDIT] http://msdn.microsoft.com/en-us/magazine/cc163854.aspx#S7 обсуждает использование Timer для этого, но прямо не заявляет, что .NET Framework будет гарантировать, что поток Timer имеет низкий приоритет. Это может быть решением, но гарантировано ли это?

[EDIT] Этот парень говорит о важных проблемах, связанных с исключениями: http://flimflan.com/blog/SafelyRunningBackgroundThreadsInASPNET20.aspx

[EDIT] Интересно, что само по себе переполнение стека использует фоновые потоки IIS для моих целей: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/... в комментариях все говорят, что их (больше не используется) методика отстой, но этот в комментариях есть смысл для меня ...

Ответы [ 3 ]

3 голосов
/ 13 июля 2010

Вместо того, чтобы опрашивать пул приложений на предмет низкой загрузки ЦП, почему бы не предположить, что эта нагрузка будет низкой, когда система находится под самой низкой нагрузкой (в нерабочее время и т. Д.). Тогда вы можете просто запланировать отчетность в этом окне.и не беспокойтесь о нагрузке на процессор, загружающей систему.

2 голосов
/ 13 июля 2010

Вы можете запустить поток и запустить его в фоновом режиме.Это даст ему более низкий приоритет, чем обычные потоки пользовательского интерфейса.

0 голосов
/ 29 октября 2010

Насколько я могу судить, изумительно, нет хорошего ответа. Лучший ответ, который я могу придумать, - это запускать фоновые потоки в IIS и иметь отдельный запросчик опроса, время от времени пропингующий сервер, чтобы убедиться, что он активен. Если кто-нибудь придумает лучший ответ, чем этот, я переназначу галочку, хотя ...

...