Что такое домен приложения .NET?
В частности, каковы последствия запуска кода в двух разных доменах приложений?
Как обычно данные передаются через границу домена приложения? Это то же самое, что передавать данные через границу процесса? Мне любопытно узнать больше об этой абстракции и о том, для чего это полезно.
РЕДАКТИРОВАТЬ: Хороший существующий охват класса AppDomain вообще Я не понимаю Области приложений
Ответы
Ответ 1
An AppDomain в основном обеспечивает изолированную область, в которой код выполняется внутри процесса.
Легкий способ думать об этом почти похож на процесс с более легким весом, сидящий внутри вашего основного процесса. Каждый AppDomain существует в процессе в полной изоляции, что позволяет безопасно запускать код (его можно разгружать без необходимости разрывать весь процесс), с отдельной безопасностью и т.д.
Что касается вашей специфики - если вы запускаете код в 2 разных AppDomains внутри процесса, код будет работать изолированно. Любая связь между AppDomains будет либо сериализована, либо обработана через MarshallByRefObject. Это ведет себя очень похоже на использование удаленных операций в этом отношении. Это обеспечивает огромную степень безопасности - вы можете запускать код, которому вы не доверяете, и если он что-то делает не так, это не повлияет на вас.
В описании MSDN есть много других подробностей Области приложений.
Ответ 2
Это уровень изоляции, предоставляемый средой выполнения .NET. Таким образом, домены приложений живут в процессе (1 процесс может иметь много доменов приложений) и иметь собственное виртуальное адресное пространство.
Домены приложений полезны, потому что:
- Они менее дороги, чем полные процессы.
- Они многопоточные
- Вы можете остановить его, не убивая все в процессе
- Сегрегация ресурсов /config/etc
- Каждый домен приложения работает на собственном уровне безопасности
Ответ 3
Если вы посмотрите на него с точки зрения внутренних деталей процессора, он устанавливает другое значение для регистров кода (CS). код и CS: IP (указатель инструкций) - это тот, который выполняется процессором.
(для краткости я решил сократить обсуждение таблицы страниц).
AppDomain отмечает эту границу. для безопасности кода.
Причиной для этого фона является уйти с вопросом такого рода:
1. Как мы можем получить доступ к ресурсу в двух доменах приложения (да, используя каналы или некоторые другие механизмы обмена не напрямую, как CS: IP не может быть настроен на какой-либо другой appdomain.Это только ОС может это сделать. Не CLR)
-
Может ли быть несколько потоков в домене приложений. Технически да, поскольку значение CS будет в текущем процессе. вы можете изменить IP на что-то другое с помощью инструкции перехода (вызов функции /goto )
-
могут взаимодействовать два потока в двух разных доменах приложения (№ ссылочная точка 1.)
-
можно связать два потока в одном домене приложения (да. обратитесь к пункту 2)
на несколько других комбинаций этих случаев можно было бы ответить, не зная, как работает CS: IP.
Ответ 4
Каждое приложение, выполняющееся внутри процесса, AppDomain также является легким процессом, или мы можем сказать логический блок, который имеет группу сборок (это контейнер, который содержит группу сборок), и это существует внутри процесса на уровне изоляции того же процесса, это позволяет запускать несколько сборок в рамках одного процесса и предотвращать их прямой доступ.
Запуск Dot Net Application внутри AppDomain:
После запуска какого-либо сетевого приложения с использованием операционной системы оболочка загружает CLR в процесс, и новый AppDomain был создан в том же процессе и загружает все сборки в созданном AppDomain, теперь из кода AppDomain будет выполнен.
Когда настраивается AppDomain:
Мы можем создать собственный AppDomain, теперь дело в том, в каком сценарии мы можем создать собственный AppDomain. Предположим, что время выполнения необходимо добавить или удалить сборки без прерывания работающего приложения, тогда мы можем создать собственный AppDomain.