Что такое домен? [дубликат]



этот вопрос уже есть ответ здесь:




  • Использование домена приложения в C#

    5 ответов



Что такое AppDomain? Каковы преимущества доменов приложений и почему
Microsoft принесла концепцию AppDomains, в чем была проблема без AppDomains?



пожалуйста, поясните.

531   3  

3 ответов:

An AppDomain обеспечивает слой изоляции внутри процесса. Все, что вы обычно думаете, как "за программу" (статические переменные и т. д.), На самом деле за-AppDomain. Это полезно для:

  • плагины (вы можете выгрузить AppDomain, но не сборку внутри an AppDomain)
  • безопасность (вы можете запустить набор кода с определенными уровнями доверия)
  • изоляция (вы можете запускать разные версии сборок и т. д.)

В боль вам нужно использовать remoting и т. д.

см. MSDN для получения дополнительной информации. Честно говоря, это не то, с чем вам нужно возиться очень часто.

домен приложения реализует концепцию непрерывного пространства виртуальной памяти, содержащего код и ресурсы в памяти, к которым можно напрямую обращаться или на которые можно ссылаться.

отдельные домены приложений не имеют общего пространства памяти и, следовательно, один домен приложений не может напрямую ссылаться на содержимое в другом. В частности, данные должны передаваться между доменами приложений через процесс копирования по значению. В частности, ссылочные объекты, которые полагаются на указатели и, следовательно, адреса памяти, сначала необходимо сериализовать из источника, а затем десериализовать в целевой домен приложений.

ранее в системах Windows границы памяти были реализованы процессами; однако построение процессов является ресурсоемким. Они также служат двойной цели в качестве границ потоков. Домены приложений, с другой стороны, связаны только с границей памяти или адресным пространством. Потоки могут "течь" через домены приложений (то есть процедура может вызывать точку входа в другой AppDomain и ждать его возвращения. Нить сказал продолжить выполнение в другом домене).

одним из существенных преимуществ этой архитектуры является то, что шаблоны связи между доменами приложений остаются практически неизменными независимо от того, находятся ли Домены приложений в одном процессе, разных процессах или на разных машинах все вместе: а именно процесс сериализации и десериализации (маршалинга) данных параметров.

Примечание 1: значение a поток, пересекающий домен приложения, является блокирующим или синхронным вызовом метода в другой домен приложения (по сравнению с неблокирующим или асинхронным вызовом, который породил бы другой поток для продолжения выполнения в целевом домене приложения и продолжения в его текущем домене приложения, не ожидая ответа).

примечание 2: существует такая вещь, как локальное хранилище потока. Однако лучшим именем было бы локальное хранилище потоков домена приложения, поскольку потоки оставляют свои данные позади, когда они пересекают Домены приложений но забрать их обратно, когда они вернутся:http://msdn.microsoft.com/en-us/library/6sby1byh.aspx

Примечание 3: На .Чистая среда выполнения приложения процесс Windows с соответствующей кучи. Он может содержать один или несколько доменов приложений в этой куче. Однако Домены приложений предназначены для того, чтобы не обращать внимания друг на друга и общаться друг с другом через маршалинг. Возможно, что оптимизация может быть выполнена в обход маршалинга между взаимодействующими общими доменами приложений та же среда выполнения .Net и, следовательно, та же куча процессов Windows.

Домены приложений можно рассматривать как легкие процессы. Они разделяют многие из тех же характеристик процесса, например, у них есть свои собственные копии статики, сборок и т. д., но они содержатся в одном процессе. С точки зрения операционной системы процесс-это просто процесс, независимо от того, сколько доменов приложений он может содержать.

В отличие от процесса, однако, домен приложений не имеет никаких потоков, если вы явно не создаете их. Поток может выполнять код в любом домен приложений.

Домены приложений являются частью одного и того же процесса и, таким образом, фактически используют одну и ту же управляемую кучу. Обычно это не проблема, так как модель программирования AppDomain предотвращает неявный доступ между доменами приложений. Однако некоторые ссылки фактически разделяются между доменами приложений, такими как объекты типа и интернированные строки.

Comments

    Ничего не найдено.