Próbuję je wypowiedzieć innymi słowami.
Na serwerze można mieć wiele działających razem witryn asp.net. Każda witryna jest domeną aplikacji .
Do każdego z nich należy przypisać jedną pulę aplikacji . Wiele domen aplikacji (witryn) może mieć tę samą pulę aplikacji, a ponieważ mają tę samą pulę aplikacji, działają w ramach tych samych procesów i na tym samym koncie - i mają te same ustawienia puli. Jeśli ta pula zostanie ponownie uruchomiona, wszystkie witryny w tej puli zostaną ponownie uruchomione.
Teraz każda pula może mieć jeden lub więcej procesów roboczych . Każdy proces roboczy to inny program, który uruchamia Twoją witrynę, ma własne zmienne statyczne, różne wywołania start stop itp. Różne procesy robocze nie komunikują się ze sobą, a jedynym sposobem wymiany danych są wspólne pliki lub wspólna baza danych. Jeśli masz więcej niż jeden proces roboczy i jeden z nich wykonuje długie obliczenia, drugi może zająć się obsługą połączeń internetowych i wyświetlaniem treści.
Kiedy przypisujesz wiele procesów roboczych do jednej puli, tworzysz tzw. Ogród sieciowy, a Twoja witryna jest uruchamiana z więcej niż jednego komputera, jeśli komputer jest jedną maszyną przetwarzającą.
Każdy proces roboczy może mieć wiele wątków.
Wpływ większej liczby procesów roboczych na Ciebie:
Gdy masz jeden proces roboczy, wszystko jest prostsze, w aplikacji wszystkie zmienne statyczne są takie same i używasz lock
do ich synchronizacji.
Kiedy przypisujesz więcej niż jeden proces roboczy , nadal używasz lock
dla zmiennych statycznych, zmienne statyczne nie różnią się między wieloma uruchomieniami twojej witryny i jeśli masz jakiś wspólny zasób (np. Tworzenie miniatury na dysku) Następnie musisz zsynchronizować swój proces roboczy z Mutex
.
Jeszcze jedna uwaga. Wygląda na to, że kiedy zrobisz więcej procesów roboczych, możesz mieć bardziej płynne asynchroniczne ładowanie strony. Występuje mały problem z programem obsługi sesji asp.net, który blokuje cały proces w celu załadowania strony - to jest dobre i nie zależy od tego, czy znasz to i sobie z tym poradzisz - lub zmienić.
Porozmawiajmy więc tylko o jednej witrynie z wieloma procesami roboczymi. Tutaj napotykasz problem, z którym musisz zsynchronizować wspólną zmianę zasobów Mutex
. Ale strony / programy obsługi, które używają sesji, nie są asynchroniczne, ponieważ sesja je blokuje. Jest to dobre na początek, ponieważ unikasz samodzielnej synchronizacji wielu punktów.
Niektóre pytania na ten temat:
Aplikacja sieci Web zablokowana podczas przetwarzania innej aplikacji internetowej przy współużytkowaniu tej samej sesji
Wywołania jQuery Ajax do usługi sieciowej wydają się być synchroniczne
Serwer ASP.NET nie przetwarza stron asynchronicznie
Zastępuje całkowicie sesję ASP.Net
Teraz ta blokada sesji nie ma wpływu na różne witryny.
W przypadku różnych witryn bardziej przepracowany proces może pomóc w zapobieganiu blokowaniu przez jedną witrynę drugiej w przypadku długotrwałego procesu.
Również w przypadku różnych witryn pomocna może być większa liczba pul, ponieważ każda pula ma co najmniej jeden działający proces, ale pamiętaj i zobacz sam za pomocą eksploratora procesów, każdy proces roboczy zajmuje więcej pamięci komputera i jeden duży serwer z pamięcią 16G a jeden serwer SQL nie może mieć zbyt wielu różnych działających procesów - na przykład na serwerze ze 100 współdzielonymi witrynami nie można mieć 100 różnych pul.