49 votes

Différence entre AppDomain, Assembly, Process et Thread

Quelle est la différence entre AppDomain , Montage , Processus et un Fil conducteur ?

60voto

Will Points 76760

Un AppDomain est une unité d'isolation dans un processus. Les AppDomains peuvent être créés au moment de l'exécution, chargés avec du code, et déchargés. C'est une limite d'isolation conçue pour rendre les applications .NET plus fiables.

Un assemblage contient un ou plusieurs modules, qui contiennent des morceaux de code compilés. Vous verrez généralement un assemblage sous la forme d'un .EXE ou d'un .DLL.

Un processus est une application en cours d'exécution (en simplifiant à l'extrême).

Un thread est un contexte d'exécution. Le système d'exploitation exécute le code dans un thread. Le système d'exploitation passe d'un thread à l'autre, permettant à chacun d'entre eux de s'exécuter à son tour, donnant ainsi l'impression que plusieurs applications sont exécutées en même temps.

Pour résumer (de manière très simplifiée)...

Un programme est exécuté. Un processus est créé par le système d'exploitation et, dans son unique thread, il commence à charger du code à exécuter. Dans une application .NET, un seul AppDomain est créé par le CLR. L'assemblage d'exécution de l'application (le .EXE) est chargé dans cet AppDomain et commence son exécution. L'application peut engendrer de nouveaux processus, créer des AppDomains, charger d'autres assemblages dans ces domaines, puis créer de nouveaux Threads pour exécuter du code dans n'importe lequel de ces AppDomains.

3 votes

Techniquement, un assemblage est un composant, composé d'un ou plusieurs modules. Ce sont les modules qui sont les fichiers .EXE ou .DLL.

2 votes

Il est vrai que vous pouvez fusionner des modules en un seul assemblage. C'est l'un des nombreux détails que j'ai omis !

0 votes

Lorsque vous mettez tout cela ensemble, quelle est la différence entre -> Un processus est créé par le système d'exploitation et L'application peut engendrer de nouveaux processus ?

17voto

IntelligentBinary Points 103

L'un des principaux avantages du compilateur JIT du CLR est qu'il empêche le chevauchement de l'espace d'adressage virtuel des processus. Par exemple, si le processus 1 est créé et que le CLR (MScorEE.dll) gère l'exécution d'un assemblage géré (.exe ou .dll) dans ce processus, le compilateur JIT s'assurera que l'espace d'adressage virtuel alloué à ce processus n'entrera pas en collision ou ne se chevauchera pas avec les autres processus adjacents. Grâce à cet avantage, il est maintenant possible de réutiliser le même processus pour plus d'une exécution de code géré ! Chaque exécution de code géré aura son propre AppDomain et plus d'AppDomains peuvent faire partie d'un seul processus. C'est ce qui est utilisé par IIS et SQL Server (un seul processus, plusieurs AppDomains).

L'assemblage est un terme abstrait qui représente un composant unique et réutilisable du code géré. L'assemblage se compose de métadonnées (en-tête PE32 ou PE32+ + en-tête IL) et d'instructions IL. Le compilateur JIT de CLR compile et convertit les IL d'assemblage en un jeu d'instructions spécifique à la machine, basé sur le processeur et son architecture (x86 ou x64).

Le processus est ce que le système d'exploitation utilise pour faciliter l'exécution d'un programme. Un processus est une "représentation RAM" d'un programme qui possède un espace d'adressage composé de la pile, du tas, de la région statique et de la région de code. Chaque processus est associé à un identifiant de processus unique.

Le fil est un procédé léger. Un processus possède au moins un thread (c'est-à-dire le thread principal) et, en fonction du parallélisme, le système d'exploitation peut créer plusieurs threads au sein d'un seul processus et effectuer un changement de contexte entre eux pour accélérer l'exécution du programme. Les threads peuvent partager certaines régions de mémoire au sein d'un processus.

1 votes

Correction : les threads ne partagent généralement pas de piles. Ils peuvent lire/modifier les piles des autres s'ils le veulent vraiment, mais en général, chaque fil a sa propre pile. J'ai supprimé cette formulation de votre message. Veuillez vérifier à nouveau si c'est ce que vous vouliez dire.

0 votes

Je suis d'accord. Les fils ont leur propre pile. Merci pour la correction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X