2009-04-09 13 views

risposta

45

Un dominio di applicazione è un'unità di isolamento all'interno di un processo. AppDomains può essere creato in fase di runtime, caricato con codice e scaricato. È un limite di isolamento progettato per rendere le app .NET più affidabili.

Un assieme contiene uno o più moduli, che contengono blocchi di codice compilati. Generalmente vedrai un assembly come .EXE o .DLL.

Un processo è un'applicazione in esecuzione (waaaay eccessivamente semplificato).

Un thread è un contesto di esecuzione. Il sistema operativo esegue il codice all'interno di un thread. Il sistema operativo passa da un thread all'altro, consentendo a ciascuno di eseguirlo a turno, dando l'impressione che più applicazioni siano in esecuzione contemporaneamente.

a mettere tutto insieme (molto semplificato) ...

Un programma viene eseguito. Un processo viene creato dal sistema operativo e all'interno del suo singolo thread inizia il caricamento del codice da eseguire. In un'applicazione .NET, un singolo AppDomain viene creato dal CLR. L'assembly in esecuzione dell'applicazione (il file .EXE) viene caricato in questo AppDomain e inizia l'esecuzione. L'applicazione può generare nuovi processi, creare AppDomain, caricare altri assembly in questi domini e quindi creare nuovi Thread per eseguire codice in uno qualsiasi di questi AppDomain.

+3

Tecnicamente, un assieme è un componente, costituito da uno o più moduli. Sono i moduli che sono i file .EXE o .DLL. –

+2

È vero, è possibile unire i moduli in un singolo assieme. Questo è uno dei molti dettagli che ho lasciato fuori! – Will

+0

Quando si mette tutto insieme, qual è la differenza tra -> Un processo viene creato dal sistema operativo e l'applicazione può generare nuovi processi? – variable

10

Uno dei maggiori vantaggi del compilatore JIT CLR è - impedisce la sovrapposizione dello spazio degli indirizzi virtuali dei processi. Ad esempio, se viene generato il processo 1 e CLR (MScorEE.dll) sta gestendo l'esecuzione di un assembly gestito (exe o dll) all'interno di quel processo, allora il compilatore JIT farà in modo che lo spazio di indirizzi virtuali assegnato a questo il processo non si scontrerà o si sovrapporrà agli altri processi adiacenti. Avendo questo vantaggio, è ora possibile riutilizzare il processo singolo per più di un'esecuzione di codice gestito! Ogni esecuzione di codice gestito avrà il proprio AppDomain e più di AppDomains potrebbe far parte di un singolo processo. Questo è ciò che viene utilizzato da IIS e SQL Server (processo singolo, molti AppDomain).

Assembly è un termine astratto che rappresenta un singolo componente riutilizzabile del codice gestito. L'assembly è composto da metadati (intestazione PE32 o PE32 + intestazione IL) e istruzioni IL. Il compilatore JIT di CLR compila e converte le IL di assembly in un set di istruzioni specifico per macchina, basato sul processore e sulla sua architettura (x86 o x64).

Il processo è il sistema operativo utilizzato per facilitare l'esecuzione di un programma. Un processo è una "rappresentazione RAM" di un programma che ha uno spazio di indirizzamento costituito da stack, heap, static e area di codice. Ad ogni processo è associato un ID processo univoco.

La filettatura è una procedura leggera. Un processo ha almeno un thread (cioè il thread principale) e, a seconda del parallelismo, il sistema operativo può creare più thread all'interno di un singolo processo e il context-switch tra di loro per supportare l'esecuzione più rapida del programma. I thread possono condividere alcune regioni di memoria all'interno di un processo.

+0

: i thread di solito non condividono le pile. Possono leggere/modificare pile l'uno dell'altro se lo desiderano veramente, ma in generale, ogni thread ha il proprio stack. Ho rimosso quella dicitura dal tuo post. Per favore ricontrolla se è quello che intendevi. – quetzalcoatl

+0

Sono d'accordo. I thread hanno il loro stack. Grazie per la correzione. – IntelligentBinary