2009-12-26 2 views
4

appDomains를 더 잘 이해하려고합니다. 내 이해에서 Windows 프로세스에서 모든 응용 프로그램을 실행합니다. 각 응용 프로그램은이 프로세스 내에 상주하는 자체 개체에 캡슐화됩니다. 이 객체는 공유 할 수없는 전역 변수를 보유합니다. 프로세스에있는 모든 오브젝트는 데이터를 서로 공유 할 수 없습니다. 내 이해에서 appDomain은 Windows 프로세스에있는 특수 객체입니다. 모든 작업은 할당 된 모든 어셈블리에 대한 참조를 유지합니다. 만약 내가 틀렸다면 누군가가 그것에 대해 더 자세히 설명 할 수 있거나 나를 바로 잡을 수 있습니다. 또한 모든 좋은 자원이 또한 할 것입니다. 여기에서 일어나고있는 것은 당신이 닷넷의 구현과 응용 프로그램 도메인의 개념를 혼동한다는 것이다처럼Windows의 AppDomain 이해

+0

[이 블로그를보십시오.] (http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspx) –

답변

8

는 소리가 난다.

먼저 개념부터 살펴 보겠습니다. 개념적으로는 스레드 또는 프로세스와 동일한 종류의 것으로 생각할 수 있습니다. 프로세스는 시작하는 데 상당히 비싸지 만 개별 프로세스가 소유하는 메모리간에 높은 수준의 보호/분리를 제공합니다. 쓰래드는 시작하기에 꽤 싸지만, 크로스 쓰레드 메모리 접근에 대한 보호는 적습니다. AppDomain은 기본적으로 프로세스 수준 보호 중 일부를 스레드에 제공합니다.

당신은이 개념으로 흥미로운 것을 할 수 있습니다. 예를 들어, 프로세스는 단일 AppDomain으로 제한되지 않으므로 하나의 프로세스를 공유하는 여러 개의 응용 프로그램을 가질 수 있으며 어느 응용 프로그램도 다른 응용 프로그램을 방해하거나 충돌하지 않도록 할 수 있습니다. 그러나 주된 이유는 구현과 관련이 있습니다.

. 관리되는 인터넷 언어는 관리자가 앱 외부의 어떤 것도 앱의 메모리를 부적절하게 방해하지 않을 수있는 메모리 모델로 설계되었습니다. 또한 쓰레기 수거를 위해 별도의 스레드를 사용하여 디자인 되었기 때문에 프로세스에서 하나의 스레드로 실행되는 앱으로 이어집니다. 하나의 스레드 만 사용하는 경우 으로 시작하거나 추가 어셈블리를로드 할 수 있습니다. 그렇다면 AppDomain의 목적은 프로세스 내에서 앱 (및 메모리)을 캡슐화하는 것입니다. 어셈블리에 대한 참조를 유지하지만 개념과는 별도로 객체로 구현 될 수 있습니다.