Введение
Домены приложений CLI
Домен приложения — это механизм (аналогичный процессу в операционной системе), используемый в общей языковой инфраструктуре (CLI) для изоляции выполняемых программных приложений друг от друга, чтобы они не оказывали влияния друг на друга. Каждый домен приложения имеет собственное виртуальное адресное пространство, которое ограничивает область видимости ресурсов для этого домена приложения. Создание нескольких доменов приложений в рамках одного процесса невозможно в .NET Core и .NET 5+.
Свойства
Домен приложения CLI содержится в процессе операционной системы. Один процесс может содержать множество доменов приложений. Домены приложений обладают свойствами изоляции, схожими с процессами операционной системы: в одном домене приложения может существовать несколько потоков. Приложение в одном домене может быть остановлено без влияния на состояние другого домена в том же процессе. Ошибка или исключение в одном домене не влияет на приложение в другом домене и не приводит к аварийному завершению всего процесса, в котором размещены домены. Конфигурационная информация является частью области видимости домена, а не процесса. Каждому домену могут быть назначены различные уровни безопасности доступа. Код в одном домене не может напрямую обращаться к коду в другом. В этом смысле CLI подобен миниатюрной операционной системе. Он запускает один процесс, который содержит несколько подпроцессов, или доменов приложений. Преимущество доменов приложений заключается в том, что запуск нескольких доменов приложений может потребовать меньше ресурсов, например памяти, чем запуск нескольких процессов операционной системы. Обмен данными между доменами все равно требует маршаллинга, поэтому накладные расходы могут быть сопоставимы с использованием нескольких процессов, а не с обменом данными внутри одного домена.
Multiple threads can exist within a single application domain. An application within a domain can be stopped without affecting the state of another domain in the same process. A fault or exception in one domain does not affect an application in another domain or crash the entire process that hosts the domains. Configuration information is part of a domain's scope, not the scope of the process. Each domain can be assigned different security access levels. Code in one domain cannot directly access code in another. In this sense, a CLI is like a mini operating system. It runs a single process that contains a number of sub processes, or application domains. The advantage of application domains is that running multiple application domains may require fewer resources, such as memory, than running multiple operating system processes. Communication between domains still requires marshalling, so the overheads can be closer to using multiple processes than to communicating within a single domain.
Междоменная связь
Невозможно установить прямое взаимодействие между областями применения. Однако домены приложений всё же могут взаимодействовать друг с другом, передавая объекты посредством маршаллинга по значению (несвязанные объекты) или маршаллинга по ссылке через прокси (объекты, связанные с доменом приложения). Существует также третий тип объекта – объект, связанный с контекстом, который может быть маршаллизирован по ссылке между доменами и внутри контекста собственного домена приложения. Благодаря проверяемой типобезопасности управляемого кода, среда выполнения (CLI) может обеспечить изоляцию сбоев между доменами с гораздо меньшими затратами, чем процесс операционной системы. Статическая проверка типов, используемая для изоляции, не требует тех же переключений процессов или переходов в аппаратные кольца, что и процесс операционной системы.
Управляемый код
Домены приложений – это концепция, относящаяся исключительно к управляемому коду. Любой включенный нативный/неуправляемый код (например, C++) в значительной степени не осведомлен об их существовании. Статические переменные, по всей видимости, совместно используются между доменами, обратные вызовы могут вызывать проблемы, а любые ошибки повреждения памяти в одном домене, скорее всего, приведут к повреждению и других доменов.