2010-02-10 3 views

Répondre

1

Dans la plupart des systèmes, les threads légers sont les threads normaux que vous créez avec l'aide de la bibliothèque, comme p_threads dans linux. Alors que le poids lourd, dans certains systèmes, se réfère à un processus système, avec sa propre mémoire virtuelle et une structure plus complexe, comme des informations sur les performances/statistiques du processus.

Pour plus d'informations:

http://www.computerworld.com/s/article/66405/Processes_and_Threads

http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx

25

Il est lié à la quantité de « contexte » associé à un fil, et par conséquent la quantité de temps qu'il faut pour effectuer un « changement de contexte ".

Les threads lourds (généralement les threads de niveau noyau/os) ont beaucoup de contexte (registres matériels, piles de noyau, etc.). Il faut donc beaucoup de temps pour basculer entre les threads. Les threads lourds peuvent également avoir des restrictions sur eux, par exemple, sur certains systèmes d'exploitation, les threads du noyau ne peuvent pas être préemptés, ce qui signifie qu'ils ne peuvent pas être désactivés de force tant qu'ils n'abandonnent pas le contrôle.

D'autre part, les threads légers (en général, les threads d'espace utilisateur) ont beaucoup moins de contexte. (Ils partagent essentiellement le même contexte matériel), ils ont seulement besoin de stocker le contexte de la pile de l'utilisateur, d'où le temps nécessaire pour changer les threads légers est beaucoup plus court.

Sur la plupart des systèmes d'exploitation, tous les threads que vous créez en tant que programmeur dans l'espace utilisateur seront légers par rapport aux threads de l'espace noyau. Il n'y a pas de définition formelle du poids lourd et léger, c'est juste une comparaison entre les threads avec plus de contexte et les threads avec moins de contexte. N'oubliez pas que chaque OS a sa propre implémentation de threads, et les lignes entre les threads lourds et légers ne sont pas nécessairement clairement définies. Dans certains langages et frameworks de programmation, quand vous créez un "Thread", vous n'avez peut-être même pas un thread complet, vous pourriez juste obtenir une abstraction qui cache le nombre réel de threads en dessous.

[Certains systèmes d'exploitation permettent fils de partager l'espace d'adressage, de sorte que les discussions qui généralement assez lourd, sont un peu plus léger]

4

Java threads standard sont assez lourds par rapport aux fils Erlang qui sont très légers processus spawnable. Erlang démontre une machine à états finis distribuée. Cependant, à titre d'exemple, http://kilim.malhar.net/, une bibliothèque d'extensions Java basée sur le modèle Actor de concurrence, propose une construction pour les threads légers dans Java. Au lieu de thread implémentant run(), un thread Kilim implémente à partir de la bibliothèque Kilim en utilisant une méthode execute(). Apparemment, cela montre que l'exécution de Java surpasse Erlang (au moins dans un environnement local AFAIK). Java a effectivement eu de telles choses dans la langue originale appelée «fil vert» mais les versions ultérieures de Java les ont abandonnées au profit des threads natifs