2009-05-15 3 views
3

У меня запланированная задача, которую мне нужно запустить, просматривая страницу, мой веб-хост не позволяет мне использовать планировщик окон.Могу ли я безопасно создавать потоки в ASP.NET MVC?

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

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

Неправильно ли использовать потоки из веб-приложения? Есть ли способ сделать это безопасно? Какие существуют ограничения на резьбу? Мне просто нужно знать дополнительную информацию?

EDIT:? Подвопросы

Если я использую темы от ThreadPool (который используется в ASP.NET время выполнения (спасибо Anton), я могу ограничить количество нитей он может использовать то, что это предел ASP.NET размер ThreadPool?

было бы лучше иметь отдельный сайт, который делает это? Возможно, виртуальная папка, содержащая отдельное приложение ASP.NET? это было бы остановить меня от ограничения Threadpool правильно?

+0

См. Также: http://stackoverflow.com/questions/1325718/using-threadpool-queueuserworkitem-in-asp-net-in-a-high-traffic-scenario – Matthias

ответ

3

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

Путь вокруг этого будет порождать обычный Thread, но они могут быть убиты, когда ваш AppPool будет переработан.

+0

Я думаю, вы просто решили мою проблему. Поскольку я запускал это из командной строки, я менял размер threadpool. Кажется, это то, что заставляет его упасть. Sub question then: могу ли я ограничить количество потоков из threadpool, которые он использует? –

+0

@Matthew Что именно вы используете из командной строки? –

+0

Извините, это было плохо написано. Моя задача была инкапсулирована в консольное приложение для выполнения вручную по требованию.Он работал без проблем и только начал вызывать проблемы, когда я выполнил его с веб-сайта. Вы подтолкнули мою память, когда указали размер потока. –

0

Я думаю это зависит от того, как это делается. Я не очень компетентен, когда дело доходит до потоковой передачи в ASP.NET, но я думаю, что существует риск, что вы в конечном итоге используете потоки, которые в противном случае использовались для обслуживания запросов от клиентов.

Here is a tutorial on multithreading in ASP.NET, что может помочь вам немного переслать.

3

Я был бы удивлен, если бы он активно вызвал проблему, если эти потоки не пытаются вернуться к запросу/ответу (который теперь может исчезнуть). Какие симптомы вы видите? Можете ли вы определить «дурацкий»?

Я использую потоки регулярно для ведения журнала и т. Д., Без проблем.

Чтобы свести к минимуму воздействие, вы можете использовать шаблон производителя/потребления, поэтому у вас есть только один (или несколько) рабочих потоков, обслуживающий, однако, много потоков запроса/ответа ASP.NET MVC.

+0

«Wacky» Я имею в виду, что он заканчивает обработку моя задача (которая должна была закончить все мои порожденные потоки, поскольку я жду их окончания/таймаут) и возвращает View(), но браузер никогда не заканчивает получение страницы, а любой последующий запрос на любую другую страницу сайта просто висит. –

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