Pourquoi sont-fils appelé processus légers?
Un thread est "léger" parce que la plupart de l'espace a déjà été accompli par le biais de la création de son processus.
J'ai trouvé ça dans un des tutoriels.
Quelqu'un peut-il définir ce qu'elle signifie exactement?
- En gardant les excès de "processus de création" et de votre système d'exploitation et vous verrez combien les frais généraux, il est dans la création d'une procédure.
- Les remboursements Ne Retourne: Et vous constaterez qu'il diffère considérablement entre les systèmes d'exploitation.
- Les remboursements Ne Renvoie - quelle est la entendu de cache de synchronisation entre les threads sur un multi-core de la machine ou de la surcharge de la commutation de contexte et d'économie hors de l'état de la pile et du registre?
Vous devez vous connecter pour publier un commentaire.
La demande pour que les fils sont "légère" est - selon la plate-forme - pas nécessairement fiables.
Un thread de système d'exploitation doit prendre en charge l'exécution de code natif, par exemple, écrit en C. Donc, il doit fournir une bonne taille de la pile, généralement mesurée en méga-octets. Donc, si vous avez commencé à 1000 threads (peut-être dans une tentative de prise en charge de 1000 connexions simultanées à votre serveur), vous avez une capacité de mémoire de 1 GO dans votre processus avant même de commencer à faire tout le travail réel.
C'est un vrai problème hautement évolutive serveurs, donc ils n'utilisent pas les threads comme s'ils étaient légers à tous. Ils les traitent comme des poids lourds de ressources. Ils pourraient créer à la place un nombre limité de threads dans une piscine, et de leur permettre de prendre des éléments de travail à partir d'une file d'attente.
Que cela signifie que les fils sont de longue durée et en nombre restreint, il peut être préférable d'utiliser les processus de la place. De cette façon, vous obtenez l'adresse de l'espace d'isolement et il n'est pas vraiment un problème à court de ressources.
En résumé: méfiez-vous de la "commercialisation" des revendications faites au nom du fils. Le traitement parallèle est grande (de plus en plus, il va être essentiel), mais les fils ne sont qu'un moyen de l'atteindre.
malloc
/free
les appels doivent être synchronisés, ce qui pourrait signifier une tonne de verrouillage en fonction de votre utilisation de la mémoire. J'ai vu une application à l'aide de threads de décrochage à 4 cœurs, mais lors du passage à des processus distincts, il serait échelle à 8 (et probablement plus, n'ont pas plus de cœurs pour des tests). Le moins de mémoire que vous partagez, moins vous avez à synchroniser.Processus de création est "cher", parce qu'il doit mettre en place un nouvel espace de mémoire virtuelle pour le processus avec son propre espace d'adressage. "cher" les moyens prend beaucoup de temps CPU.
Fils n'avez pas besoin pour ce faire, il suffit de changer quelques conseils autour, donc c'est beaucoup "moins cher" que la création d'un processus. La raison de threads n'ont pas besoin de cela est parce qu'ils s'exécutent dans l'espace d'adressage de la mémoire virtuelle du processus parent.
Chaque processus doit avoir au moins un fil. Donc, si vous pensez à ce sujet, la création d'un processus de création, le processus ET la création d'un thread. De toute évidence, la création de seulement un thread va prendre moins de temps et de travail par l'ordinateur.
En outre, les threads sont "légers", parce que les fils peuvent interagir sans avoir besoin de communication inter-processus. La commutation entre les threads est "moins cher" que la commutation entre les processus (de nouveau, il suffit de le déplacer de quelques conseils autour de vous). Et de communication inter-processus nécessite plus cher que les threads.
Threads au sein d'un processus partagent le même espace de mémoire virtuelle mais dans une pile séparée, et éventuellement des "thread local storage" si sa mise en œuvre. Ils sont léger en raison d'un changement de contexte est simplement un cas de commutation le pointeur de pile et le compteur de programme et de la restauration d'autres registres, wheras un processus changement de contexte implique la commutation de la MMU contexte.
De plus, la communication entre les threads d'un processus est léger parce qu'ils partagent un espace d'adressage.
processus:
fil:
Un processus contient un ou plusieurs threads et un thread peut faire tout ce qu'un processus peut faire. Aussi des discussions au sein d'un processus partagent le même espace d'adressage en raison de laquelle le coût de la communication entre les threads est faible, car c'est à l'aide de la même section de code, de données de la section de l'OS et de ressources, de sorte que ces toutes les fonctionnalités de fil en fait un "processus léger".
Simplement parce que le fils partagent le même espace mémoire. La mémoire allouée pour le thread principal sera partagé par tous les autres threads.
Alors que dans le cas de Processus, le processus de l'enfant sont dans le besoin d'allouer de l'espace mémoire séparé.