2009-04-09 11 views

Odpowiedz

45

AppDomain jest jednostką izolacji w procesie. AppDomains można tworzyć w środowisku wykonawczym, ładować za pomocą kodu i rozładowywać. Jest to granica izolacji, dzięki której aplikacje .NET są bardziej niezawodne.

Zespół zawiera jeden lub więcej modułów, które zawierają skompilowane porcje kodu. Zwykle zobaczysz zespół jako .EXE lub .DLL.

Proces jest aplikacją wykonawczą (można ją uprościć).

Wątek jest kontekstem wykonawczym. System operacyjny wykonuje kod w wątku. System operacyjny przełącza się między wątkami, umożliwiając każdemu wykonanie po kolei, co sprawia wrażenie, że wiele aplikacji jest uruchomionych w tym samym czasie.

Aby umieścić to wszystko razem (bardzo uproszczony) ...

program jest wykonywany. Proces jest tworzony przez system operacyjny, a w ramach jednego wątku rozpoczyna ładowanie kodu do wykonania. W aplikacji .NET aplikacja CLR tworzy pojedyncze AppDomain. Zespół wykonawczy aplikacji (.EXE) jest ładowany do tego elementu AppDomain i rozpoczyna wykonywanie. Aplikacja może odradzać nowe procesy, tworzyć AppDomains, ładować inne zespoły do ​​tych domen, a następnie tworzyć nowe wątki w celu wykonania kodu w dowolnym z tych AppDomains.

+3

Z technicznego punktu widzenia zespół jest komponentem złożonym z jednego lub więcej modułów. To moduły, które są plikami .EXE lub .DLL. –

+2

To prawda, że ​​możesz łączyć moduły w jeden zespół. To jeden z WIELU szczegółów, które pominąłem! – Will

+0

Po umieszczeniu wszystkiego razem, jaka jest różnica między -> Proces jest tworzony przez system operacyjny i Aplikacja może odradzać nowe procesy? – variable

10

Jedną z największych zalet kompilatora JIT CLR jest - zapobiega nakładaniu się wirtualnej przestrzeni adresowej procesów. Na przykład, jeśli proces 1 zostanie utworzony, a CLR (MScorEE.dll) zarządza wykonaniem zespołu zarządzanego (.exe lub .dll) w ramach tego procesu, wówczas kompilator JIT upewni się, że wirtualna przestrzeń adresowa przydzielona do tego proces nie będzie kolidować lub pokrywać się z innymi sąsiednimi procesami. Dzięki tej przewadze możliwe jest ponowne wykorzystanie pojedynczego procesu dla więcej niż jednego wykonania zarządzanego kodu! Każde zarządzane wykonanie kodu będzie miało własne AppDomain i więcej niż AppDomains może być częścią jednego procesu. To jest to, co używane przez IIS i SQL Server (pojedynczy proces, wiele AppDomains).

Zespół to pojęcie abstrakcyjne, które reprezentuje pojedynczy, wielokrotnego użytku składnik kodu zarządzanego. Składa się z metadanych (nagłówek PE32 lub PE32 + nagłówek IL) i instrukcji IL. Kompilator JIT języka CLR kompiluje i konwertuje IL-e zestawu w zestaw instrukcji specyficznych dla maszyny, w oparciu o procesor i jego architekturę (x86 lub x64).

Proces jest używany przez system operacyjny w celu ułatwienia wykonywania programu. Proces jest "reprezentacją RAM" programu, który ma przestrzeń adresową, która składa się ze stosu, sterty, obszaru statycznego i kodu. Każdy proces ma powiązany z nim unikalny identyfikator procesu.

Gwint to proces o niewielkiej masie. Proces ma co najmniej jeden wątek (to jest główny wątek) i w zależności od równoległości system operacyjny może tworzyć wiele wątków w ramach jednego procesu i przełączać między nimi kontekst w celu obsługi szybszego wykonywania programu. Wątki mogą udostępniać niektóre obszary pamięci w procesie.

+0

korekta: wątki zwykle nie dzielą się stosami. Mogą czytać/modyfikować stosy siebie nawzajem, jeśli naprawdę tego chcą, ale ogólnie każda nić ma własny stos. Usunąłem ten tekst ze swojego wpisu. Sprawdź ponownie, czy to, co miałeś na myśli. – quetzalcoatl

+0

Zgadzam się. Wątki mają własny stos. Dziękuję za poprawę. – IntelligentBinary

Powiązane problemy