Quelle est la différence entre un thread et un process ?
Un process peut avoir plusieurs thread qui partage les mêmes espaces d’adressage gloables et les mêmes espace d’adressage avec d’autres threads qui tournent sur ce même process. Ils peuvent donc intéragir sur les mêmes adressage de données en même temps. Les processes ne partagent pas les mêmes espaces d’adressage et un mécanisme différent doit être utilisé si ils doivent partager les mêmes données. Un thread ne partage pas sa pile d’éxécution.
Si l’on considère une application “word” c’elle-ci est un process, le auto-save et autres features qui tournent en background sont elles des threads de ce process qui opère tous sur les mêmes données (le document).
1. Le process à son propre espace mémoire d’adressage. Les threads eux partagent le même espace mémoire d’adressage du process qui les a créés.
2. Un Thread a un accès direct à son segment de données de son process. Le process lui à sa propre copie du segment de données de son process parent.
3. Les threads peuvent communiques entre eux pour un même process. Les process doivent utiliser une communication interprocess afin de communique avec les process de sa famille.
4. Un thread est léger (pas d’overhead), un process est lourd (énormément d’overhead).
5. Des nouveaux threads sont faciles à créer, des nouveaus process ont besoin de la duplication d’un process parent.
6. Les threads peuvent exercer un contrôle quasi total sur d’autres thread du même process. Un process ne peut exercer son contrôle que sur ces process enfants.
7. Des changements sur le thread principal (priorité, annulation) peut affecter le comportement des autres threads de ce process. Un changement sur un process ne cause pas de changement sur ses process fils.
Qu’est ce qu’un service windows et en quoi son temps de vie diffère d’un exécutable (EXE) ?
Un service est démarrer avant que vous vous loggiez sur un système tandis qu’un exécutable a besoin que vous soyez logger pour fonctionner. Une service windows n’a pas d’interface d’utilisation, un exécutabel en possède générallement un. Les services windows sont générallement utilisés par des serveurs pour des applications qui ont une longue durée de vie.
Quel est la valeur maximal d’espace mémoire qu’un simple process sur Windows peut adresser et en quoi est-ce différent de la valeur maximal de mémoire virtuel pour le système ?
Les process accèdent à des espaces mémoires virtuels, pas physiques. Les applications n’accèdent jamais à la RAM directement, elles utilisent l’inteface de gestion de mémoire du processeur.
Les valeurs d’adressage mémoire maximales dépendent des versions de windows utilisées et comment le programme a été compilé.
Tous les process 32bit sur Windows 32bit ont 4 gigas d’espace mémoire d’adressage. Les 2 gigas du dessus sont commun à tous les process et sont utilisés par le système. Les 2gb du dessous sont privée à chaque process et son inacesseble à tous les autres. A moins que le programme soit compilé pour utilisées un large espace mémoire, sa partie privée s’élève alors à 3gb.
Pour les processeurs 32bit sur Windows 64, chaque process à 2gb d’espace mémoire privé et 4gb si il est compilé en vue d’un large espase mémoire.
Pour les processeurs 64bits sur Windows 64, chaque process à 8TB d’espace mémoire privé si compilé pour utilisé un large espace mémoire. Les autres utilisent 2GB d’espace mémoire.
Ceci est complètement indépendant du nombre de RAM sur le système ou du Pagefile. Le system fait le lien entre l’espace mémoire physique et l’espace mémoire virtuel selon la disponibilité et ses besoins.
A chaque instant les données des l’espaces de mémoire virtuel pourrait être stoquée sur la RAM, sur le disque ou les deux. Tout ceci est totalement transparent à toutes applications. Les données souvent accédées seront stoquées dans la RAM, les autres sur le disque.
Quel est la différence entre un exe et une dll ?
Un exe est un programme exécutabel. Une dll peut être loader et utiliser par un programme dynamiquement. De manière simple c’est un répertoire de code pour des programmes. Plusieurs programmes vont utiliser les mêmes dll à la place d’avoir ce code dans leurs propres ficiers, cela permet de diminuer l’espace mémoire. Un synonyme est libraire de classe.
Un dll n’a pas de fonction principal, un ex en a un.
Une Dll est inprocess, composants et consomateurs de la dll partageront le mêmes espace mémoire. Un exe est outprocess, il fonctionnera avec son propre espace mémoire.
Auel est la différence type entre fortement lié (strongly typing) et type faiblement lié (weak-typing), lequel préférer et pourquoi ?
Le typage fort est préféré car il ne laisse pas la place à un typage ambigu ou incorrect. Les erreurs sur les typages fort seront intercepté à la compilation tandis que le typage faible sera intercepté lors de l’exécution (ce que vous ne voulez généralement pas). Par exemple un Array d’objet et un typage faible car il permet de lui ajouter un string ou int. Il y a un risque lors de l’éxécution que vous parcourez votre Array et que vous recevez un type qui vous n’aviez pas prévu. Une List<string> est un objet à typage fort car il ne permet de jouer qu’avec une liste de string et rien d’autre. MaListString.Add(5) sera reconnu à la compilation, tandis que le monArray.add(”unstring”), si ce string ce trouve à la première possition de votre array et que vous écrivez, int unchiffre = Convert.ToInt32(array[0]); vous n’aurrez une erreur qu’à l’éxécution.
Quel sont les components qui sont délivrés avec Windows Server Family ?
System.WEB.UI.Page, Syste.Windows.Forms.Fom, System.ComponentModel.Container. L’essence du développement est de ne pas développer un composant qui existe déjà sur le marché pour peu d’argent et même parfois gratuitement. Il vaut générallement mieux utiliser un composant tier, testé plutôt que d’en créer un en entier. Presque toutes les classes de .NET sont des composants, ils peuvent être réutilisés, ils sont sous version et ils peuvent être compilé dans une dll. Une définition plus stricte d’un composant serait en gros, une “surface” dans laquelle vous déposeriez une instance d’un objet dans Visual Studio .NET, vous pourriez alors lui définir ses propriétés et des gestionnaires d’évênements sur ceux-ci visuellement. Ils sont des “designable component”, ceux-ci devront absolument implémenter l’interface IComponent. Ces objets de “design” n’ont pas forcément besoin d’une surface, les classes qui dériveront de System.Web.UI.Page et System.Windows.Forms.Form seront aussi bien des contrôlles que des composants. L’existence de component impute l’existence de conteneur. En .NET, ASP.NET Webforms et Windows Forms sont des composants conteneur visuel. Les conteneurs jouent un rôle important dans la gestion des components. En particulier tout conteneur implémente la méthode IDisposable, ce qui veut dire qu’ils ont la méthode dispose permettant de déliverer les ressources comme un fichier ouvert un gestionnaire d’évênement. Dans leurs méthodes dispose, ils devront appelers les méthodes Dispose de tous leurs compontents.
La suite un autre jour…