2009-09-09 16 views

Odpowiedz

23

Aplikacja internetowa prawie na pewno jest już wielowątkowa w środowisku hostingu (IIS itp.). Jeśli twoja strona jest związana z procesorem (i chcesz używać wielu rdzeni), prawdopodobnie wiele wątków jest złym pomysłem, ponieważ gdy twój system jest obciążony, już go używasz.

Czas, w którym może być pomoc, gdy jesteś związany z IO; na przykład masz stronę internetową, która musi porozmawiać z 3 zewnętrznymi usługami sieciowymi, porozmawiać z bazą danych i napisać plik (wszystkie niepowiązane). Można to zrobić równolegle na różnych wątkach (najlepiej za pomocą wbudowanych operacji asynchronicznych, aby zmaksymalizować wykorzystanie portu końcowego), aby skrócić ogólny czas przetwarzania - wszystko to bez nadmiernego obciążenia lokalnego procesora (tutaj rzeczywiste opóźnienie występuje w sieci).

Oczywiście w takich przypadkach można również zrobić lepiej, po prostu czekając w kolejce do pracy w aplikacji internetowej i mając oddzielną usługę usunięcia i przetworzyć je - ale wtedy nie można udzielić natychmiastowej odpowiedzi "trzeba sprawdzić później, aby zweryfikować zakończenie itd.).

+1

Dobra odpowiedź, zwłaszcza zalecenie korzystania z wbudowanych operacji asynchronicznych. – RichardOD

1

Aby skorzystać z wielowątkowości, aplikacja musi wykonać znaczną ilość pracy, która może być wykonywana równolegle. Jeśli tak nie jest, to obciążenie wielowątkowością może znacznie przewyższyć korzyści.

Z mojego doświadczenia wynika, że ​​większość aplikacji internetowych składa się z kilku krótkich metod, więc poza paralelizmem już oferowanym przez środowisko hostingowe, chciałbym powiedzieć, że rzadko korzysta się z wielowątkowości w poszczególnych częściach aplikacji internetowej. . Są prawdopodobnie przykłady, gdzie przyniesie korzyść, ale domyślam się, że to nie jest bardzo powszechne.

3

IMHO powinieneś unikać używania wielowątkowego w aplikacji internetowej.

Być może aplikacja wielowątkowa może zwiększyć wydajność w standardowej aplikacji (z odpowiednim projektem), ale w aplikacji internetowej można zachować wysoką przepustowość zamiast prędkości.

ale jeśli masz kilka jednoczesnych połączeń może można użyć wątku równoległego bez globalnej degradacji wydajności

1

ASP.NET jest już zdolny do tarła kilka wątków do przetwarzania kilka wniosków równolegle, więc do prostego przetwarzania żądania tam rzadko zdarza się, że trzeba ręcznie odradzać inny wątek. Jednakże, istnieje kilka niezbyt często scenariusze, które mam natknąć które uzasadniają stworzenie innego wątku:

  • Jeśli jest jakaś operacja, która może potrwać i może pracować równolegle z resztą przetwarzania strony, możesz utworzyć dodatkowy wątek. Na przykład, jeśli istnieje usługa internetowa, którą trzeba było sondować w wyniku żądania, można odradzić inny wątek w Page_Init i sprawdzić wyniki w Page_PreRender (czekając, jeśli to konieczne). Chociaż wciąż pozostaje pytanie, czy byłoby to korzystne, czy nie - tarowanie wątku nie jest tanie, a czas pomiędzy typowymi Page_intitami i Page_prenderem jest mierzony w milisekundach. Utrzymywanie puli wątków może być nieco bardziej wydajne, a środowisko ASP.NET ma również coś, co nazywa się "stronami asynchronicznymi", które mogą być jeszcze lepiej dostosowane do tej potrzeby.
  • Jeśli istnieje pula zasobów, które chcesz okresowo czyścić. Na przykład wyobraź sobie, że używasz jakiegoś dziwnego DBMS, który jest dostarczany z ograniczonymi powiązaniami .NET, ale nie ma wsparcia dla łączenia (tak było w moim przypadku).W takim przypadku możesz zaimplementować pulę połączeń DB samodzielnie, a to wymagałoby "czystszego wątku", który obudziłby się, powiedzmy, raz na minutę i sprawdziłby, czy istnieją połączenia, które nie były używane przez długi czas (i w ten sposób można zamknąć).

Kolejna sprawa, o której należy pamiętać podczas implementacji własnych wątków w ASP.NET - ASP.NET lubi zabijać swoje procesy, jeśli były nieaktywne przez pewien czas. Dlatego nie powinieneś polegać na tym, że twoja nitka pozostanie żywa na zawsze. W każdej chwili może się to skończyć i lepiej być na to przygotowanym.

2

Wielowątkowość to technika zapewniająca jeden proces z dłuższym czasem przetwarzania, aby umożliwić szybsze działanie. Ma więcej wątków, dzięki czemu zjada więcej cykli procesora. (Z wielu procesorów, jeśli masz.) Dla aplikacji na komputer ma to wiele sensu. Jednak przyznanie większej liczby cykli procesorów użytkownikom sieci zabrałoby te same cykle z 99 innych użytkowników, którzy wykonują żądania w tym samym czasie! Technicznie rzecz biorąc, jest to zła rzecz.

Jednak aplikacja internetowa może korzystać z innych usług i procesów, które używają wielu wątków. Na przykład bazy danych nie utworzą osobnego wątku dla każdego użytkownika, który się z nimi łączy. Ograniczają liczbę wątków do kilku, dodając połączenia do puli połączeń w celu szybszego użycia. Dopóki dostępne lub łączone są połączenia, użytkownik będzie miał dostęp do bazy danych. Gdy w bazie danych zabraknie połączeń, użytkownik będzie musiał poczekać.

Zasadniczo użycie wielu wątków może być używane w aplikacjach internetowych w celu zmniejszenia liczby aktywnych użytkowników w określonym momencie! Umożliwia to systemowi współdzielenie zasobów z wieloma użytkownikami bez przeciążania zasobu. Zamiast tego użytkownicy będą musieli stać w kolejce przed swoją kolejką.

To nie będzie wielowątkowość w samej aplikacji internetowej, ale wielowątkowość w usłudze, która jest zużywana przez aplikację internetową. W tym przypadku jest to ograniczenie, ponieważ zezwala tylko na aktywację niewielkiej ilości wątków.

Powiązane problemy