Czym jest AppDomain? [duplikat]

To pytanie ma już odpowiedź tutaj:

Co to jest AppDomain ? Jakie są zalety AppDomains i dlaczego Microsoft przyniósł koncepcję AppDomains, jaki był problem bez AppDomains?

Proszę rozwinąć.

Author: Linky, 2009-02-22

3 answers

An AppDomain zapewnia warstwę izolacji w procesie. Wszystko, co zwykle myślisz o "NA program" (zmienne statyczne itp.) jest rzeczywiście per-AppDomain. Jest to przydatne dla:

  • wtyczki (można rozładować AppDomain, ale nie Zespół wewnątrz an AppDomain)
  • bezpieczeństwo (można uruchomić zestaw kodu o określonych poziomach zaufania)
  • isolation (można uruchamiać różne wersje zestawów itp.)

The pain is you need to use remoting itd.

Więcej informacji można znaleźć w MSDN. Szczerze mówiąc, to nie jest coś, z czym trzeba zadzierać bardzo często.

 111
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 14:16:06

App-domain implementuje koncepcję sąsiedniej przestrzeni pamięci wirtualnej, która zawiera kod i zasoby pamięci, do których można bezpośrednio uzyskać dostęp lub do których można się odwoływać.

Oddzielne domeny aplikacji nie współdzielą przestrzeni pamięci, w związku z czym jedna z nich nie może bezpośrednio odwoływać się do treści w innej. W szczególności dane muszą być przekazywane między Appdomainami poprzez proces kopiowania po wartości. W szczególności obiekty referencyjne, które opierają się na wskaźnikach, a tym samym adresach pamięci, muszą najpierw być serializowane ze źródła, a następnie deserializacja do docelowej AppDomain.

Poprzednio w systemach Windows granice pamięci zostały zaimplementowane przez procesy; jednak konstruowanie procesów wymaga dużej ilości zasobów. Służą również podwójnemu celowi jako granice nici. App-domeny, z drugiej strony, dotyczą tylko granicy pamięci lub przestrzeni adresowej. Wątki mogą "przepływać" przez Appdomeny (to znaczy procedura może wywołać punkt wejścia w innej Appdomenie i czekać na niego by wrócić. Wątek mówi się, że "kontynuuje" wykonywanie w innym AppDomain).

Jedną z istotnych zalet tej architektury jest to, że wzorce komunikacji między domenami aplikacji pozostają zasadniczo niezmienione, niezależnie od tego, czy domeny aplikacji są w tym samym procesie, różnych procesach, czy na różnych maszynach razem: mianowicie proces serializacji i deserializacji (marshalingu) danych parametrów.

Uwaga 1: znaczenie wątku przechodzącego przez AppDomain jest takie, że blokowanie lub synchroniczne wywołanie metody do innej AppDomain (w przeciwieństwie do nieblokującego lub asynchronicznego wywołania, które wywołałoby inny wątek, aby kontynuować wykonywanie w docelowej AppDomain i kontynuować w bieżącej AppDomain bez oczekiwania na odpowiedź).

Uwaga 2: istnieje coś takiego jak Thread Local Storage. Jednak lepszą nazwą byłoby lokalne przechowywanie wątków w domenie aplikacji, ponieważ wątki zostawiają swoje dane podczas przekraczania domen aplikacji, ale po powrocie pobierają je z powrotem: http://msdn.microsoft.com/en-us/library/6sby1byh.aspx

Note3: środowisko uruchomieniowe. Net jest aplikacją procesową systemu Windows z powiązaną stertą. Może hostować jedną lub więcej AppDomains w tej stercie. Jednak Appdomeny mają być nieświadome siebie i komunikować się ze sobą za pomocą marshalingu. Jest możliwe, że można przeprowadzić optymalizację, która omija marshaling pomiędzy komunikującymi się Appdomainami współdzielącymi ten sam. Net Runtime, a tym samym tymi samymi oknami Sterta procesów.

 43
Author: George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-18 07:35:15

AppDomains mogą być postrzegane jako lekkie procesy. Mają one wiele z tych samych cech procesu, np. mają swoje własne kopie statyki, zespoły i tak dalej, ale są one zawarte w jednym procesie. Z punktu widzenia systemu operacyjnego Proces jest tylko procesem bez względu na to, ile Appdomen może zawierać.

W przeciwieństwie jednak do procesu, AppDomain nie ma żadnych wątków, chyba że jawnie je utworzysz. Wątek może uruchamiać kod w dowolnym AppDomain.

AppDomain są częścią tego samego procesu i tym samym współdzielą tę samą stertę zarządzaną. Zazwyczaj nie jest to problemem, ponieważ model programowania AppDomain uniemożliwia Ukryty dostęp między AppDomain. Jednak niektóre odwołania są współdzielone między domenami aplikacji, takimi jak obiekty typu i internowane ciągi znaków.

 32
Author: Brian Rasmussen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-22 10:59:12