2009-04-09 15 views

Respuesta

45

Un dominio de aplicación es una unidad de aislamiento dentro de un proceso. AppDomains se puede crear en tiempo de ejecución, cargarse con código y descargarse. Es un límite de aislamiento diseñado para hacer que las aplicaciones .NET sean más confiables.

Un ensamblaje contiene uno o más módulos, que contienen fragmentos compilados de código. Por lo general, verá un ensamblaje como .EXE o .DLL.

Un proceso es una aplicación en ejecución (waaaay simplificado en exceso).

Un hilo es un contexto de ejecución. El sistema operativo ejecuta código dentro de un hilo. El sistema operativo alterna entre subprocesos, lo que permite que cada uno se ejecute sucesivamente, dando la impresión de que varias aplicaciones se ejecutan al mismo tiempo.

Para poner todo junto (muy simplificado) ...

Un programa se ejecuta. El sistema operativo crea un proceso y dentro de su único hilo comienza a cargar el código para ejecutar. En una aplicación .NET, el CLR crea un único dominio de aplicación. El ensamblado de ejecución de la aplicación (el .EXE) se carga en este Dominio de aplicación y comienza la ejecución. La aplicación puede engendrar nuevos procesos, crear AppDomains, cargar otros ensambles en estos dominios y luego crear nuevos subprocesos para ejecutar código en cualquiera de estos AppDomains.

+3

Técnicamente, un ensamblaje es un componente, compuesto por uno o más módulos. Son los módulos que son los archivos .EXE o .DLL. –

+2

Es cierto que puede fusionar módulos en un solo ensamblaje. ¡Ese es uno de los MUCHOS detalles que dejé fuera! – Will

+0

Cuando lo pones todo junto, ¿cuál es la diferencia entre -> Un proceso es creado por el sistema operativo y la aplicación puede engendrar nuevos procesos? – variable

10

Una de las mayores ventajas del compilador JIT de CLR es que evita la superposición del espacio de direcciones virtuales de los procesos. Por ejemplo, si el proceso 1 se genera y el CLR (MScorEE.dll) está administrando la ejecución de un ensamblado administrado (.exe o .dll) dentro de ese proceso, entonces el compilador JIT se asegurará de que el espacio de direcciones virtuales asignado a este proceso no colisionará o se superpondrá con los otros procesos adyacentes. ¡Con esta ventaja, ahora es posible reutilizar el proceso único para más de una ejecución de código administrado! Cada ejecución de código administrado tendrá su propio dominio de aplicación y más de lo que AppDomains podría ser parte de un solo proceso. Esto es lo que utilizan IIS y SQL Server (proceso único, muchos AppDomains).

El ensamblaje es un término abstracto que representa un componente único y reutilizable del código administrado. El ensamblaje consiste en metadatos (encabezado PE32 o PE32 + encabezado IL) e instrucciones IL. El compilador JIT de CLR compila y convierte ILs del ensamblado en un conjunto de instrucciones específicas de la máquina, basado en el procesador y su arquitectura (x86 o x64).

El proceso es lo que el sistema operativo usa para facilitar la ejecución de un programa. Un proceso es una "representación RAM" de un programa que tiene espacio de direcciones que consiste en pila, montón, estática y región de código. Cada proceso tiene un Id. De proceso único asociado a él.

El hilo es un proceso ligero. Un proceso tiene al menos un hilo (es decir, el hilo principal) y, dependiendo del paralelismo, el sistema operativo puede crear múltiples hilos dentro de un único proceso y un cambio de contexto entre ellos para soportar una ejecución más rápida del programa. Los subprocesos pueden compartir algunas regiones de memoria dentro de un proceso.

+0

corrección: los hilos generalmente no comparten pilas. Pueden leer/modificar pilas de ellas si realmente las quieren, pero en general, cada hilo tiene su propia pila. Eliminé esa redacción de tu publicación. Por favor, vuelva a verificar si es lo que quería decir. – quetzalcoatl

+0

Estoy de acuerdo. Los hilos tienen su propia pila. Gracias por la corrección. – IntelligentBinary

Cuestiones relacionadas