threads logiciels vs threads matériels

Quelle est la différence entre les threads logiciels, les threads matériels et les threads java?

Les threads logiciels, les threads java et les threads matériels sont-ils indépendants ou interdépendants? Je demande cela parce que, je sais que les threads Java sont créés dans un processus avec en jvm (java.EXE).

Est-il également vrai que ces différents processus sont exécutés sur différents threads matériels?

37
demandé sur Eng.Fouad 2011-04-08 13:48:15

4 réponses

Les threads logiciels sont des threads d'exécution gérés par le système d'exploitation.

Threads Matériels sont une caractéristique de certains processeurs qui permettent une meilleure utilisation du processeur dans certaines circonstances. Ils peuvent être exposés au / par le système d'exploitation comme semblant être des cœurs supplémentaires ("hyperthreading").

En Java, les threads que vous créez maintiennent l'abstraction des threads logiciels, où la JVM est le"système d'exploitation". Indique si la JVM mappe les threads Java sur le système D'exploitation threads est l'activité de la JVM (mais c'est presque certainement le cas). Et puis le système d'exploitation utilisera des threads matériels s'ils sont disponibles.

40
répondu Will 2017-08-20 07:59:14

Un "thread matériel" est un processeur ou un noyau physique. Ainsi, un processeur 4 core peut prendre en charge 4 threads matériels à la fois - le processeur fait vraiment 4 choses en même temps.

Un thread matériel peut exécuter plusieurs threads logiciels. Dans les systèmes d'exploitation modernes, cela se fait souvent par découpage dans le temps-chaque thread obtient quelques millisecondes à exécuter avant que le système d'exploitation planifie un autre thread à exécuter sur ce processeur. Puisque le système d'exploitation bascule rapidement entre les threads, il semble que l'un des processeurs fasse plus d'une chose à la fois, mais en réalité, un noyau n'exécute toujours qu'un seul thread matériel, qui bascule entre de nombreux threads logiciels.

Les JVM modernes mappent les threads java directement aux threads natifs fournis par le système d'exploitation, de sorte qu'il n'y a pas de surcharge inehrent introduite par les threads java vs les threads natifs. En ce qui concerne les threads matériels, le système d'exploitation essaie de mapper les threads aux cœurs, s'il y a suffisamment de cœurs. Donc, si vous avez un programme java qui démarre 4 threads, et a plus de 4 cœurs ou plus, il y a un il y a de bonnes chances que vos 4 threads fonctionnent vraiment en parallèle sur 4 cœurs séparés, si les cœurs sont inactifs.

36
répondu mdma 2011-04-08 09:57:20

Je pense que vous vous trompez. Je n'ai jamais entendu parler de threads matériels (sauf si vous voulez dire hyper threading sur certaines machines intel). Chaque processus est une représentation en cours d'exécution d'un programme. Les Threads sont des flux d'exécution simultanés avec dans un processus. Les définitions de threads Java sont mappées aux threads système par JVM. Java avait un concept de GreenThreads, ce qui n'est plus le cas.

1
répondu questzen 2011-04-08 09:57:52

Fil de discussion:

  • un thread matériel (strand, ou CPU virtuel) est les ressources matérielles qui exécute un logiciel fil.
  • un thread logiciel est un flux de instructions que le processeur exécute;

Un thread est une seule ligne de commandes qui sont traitées, chaque application a au moins un thread, la plupart ont des multiples. Un noyau est un matériel qui fonctionne sur le fil.

Un hardware thread est une séquence d'exécution active dans un processeur (core). Par définition,

  • un processeur monocœur ne peut avoir qu'un seul thread actif à la fois.
  • Un processeur à 2 cœurs peut avoir jusqu'à deux threads actifs (un par cœur); mais seulement un par cœur.

    En général, un processeur ne peut fonctionner que sur un thread par cœur, les processeurs avec hyperthreading peuvent fonctionner sur plusieurs threads par cœur.

Pour les processeurs avec hyperthreading, il y a des registres et des unités d'exécution supplémentaires dans le noyau afin qu'il puisse stocker l'état de deux threads et travaillez sur les deux, normalement pour changer les threads, vous devez videz les registres dans le cache, écrivez-les dans la mémoire principale, puis chargez le cache avec les nouvelles valeurs et charger les registres, les commutateurs de contexte nuisent considérablement aux performances.

Les threads Java sont gérés directement par le système d'exploitation, c'est-à-dire que si les cœurs du processeur sont inactifs, ils planifient le thread sur les cœurs inactifs.

0
répondu sapy 2018-04-29 02:35:22