2009-09-21 10 views
9

Mam ogólne pytanie dotyczące System.Threading.Threadpool po uruchomieniu w aplikacji sieci web na IIS. Załóżmy, że mamy 2 żądania wykonania na raz, i uruchamiamy kilka wątków za pomocą metody ThreadPool.QueueUserWorkItem. Czy te dwie prośby współużytkują ThreadPool, czy też połączenia do ThreadPool z dwóch żądań działają w dwóch osobnych pulach?Threadpool w kontekście IIS

Jest w IIS6 i 7.

dzięki za wgląd.

Odpowiedz

14

Oto cytat z dokumentacji MSDN o ThreadPool class:

Jest jeden basen wątek na proces. Pula wątków ma domyślny rozmiar 250 wątków roboczych dla każdego dostępnego procesora i zakończenia 1000 we/wy wątków.

W IIS6 i IIS7 dana aplikacja ASP.NET jest obsługiwany wewnątrz jednego procesu (w3wp.exe) poprzez infrastrukturę puli aplikacji.
Pula aplikacji może obsługiwać wiele aplikacji internetowych, zachowując je w różnych domenach aplikacji, ale działa w jednym fizycznym procesie na serwerze.

Te dwa fakty oznaczają w praktyce, że wszystkie wątki z uruchomionej instancji aplikacji WWW działają w tej samej puli wątków .NET.

+2

Oznacza to w zasadzie, że używanie ThreadPool do aplikacji internetowych, które muszą uruchamiać zadania na kilka wątków, jest złym pomysłem. –

+0

Ponieważ wszystkie żądania internetowe są już obsługiwane asynchronicznie, powiedziałbym, że w większości przypadków nie zyskujesz żadnych znaczących korzyści z uruchamiania operacji w wątkach w tle w aplikacjach internetowych. Wyjątkiem byłby prawdopodobnie, jeśli nie chcesz blokować przetwarzania żądania oczekiwania na długo działającą operację. W takim przypadku możesz odpalić wątek w tle, wykonać jeszcze więcej pracy nad żądaniem, a następnie w końcu czekać na zakończenie, zanim wyślesz odpowiedź do klienta. –

+1

W moim przypadku mam usługę, która działa w kontekście IIS, i że liczba X wychodzących żądań do różnych wyszukiwarek. Powinny się one odbywać w kilku wątkach, ponieważ chcę tutaj zwiększyć prędkość. Kiedy wszystkie wątki są kompletne, zbieram wyniki w jedną listę wyników i zwracam ją do osoby dzwoniącej. Powodem użycia puli w tym przypadku jest użycie mniejszej ilości pamięci, ponieważ ponownie wykorzystuje wątki w puli. Ale jeśli użyję tej samej puli, co używa IIS, może to nie być dobra klasa. –