Les choses sont beaucoup plus complexes qu'elles ne l'étaient à l'époque d'une instruction du processeur par cycle d'horloge.
Il y a maintenant un canalisation pour chaque instruction composée d'un certain nombre d'étapes. J'ai entendu dire qu'il y en avait jusqu'à 41, mais c'était il y a longtemps et je n'ai aucune idée de ce à quoi ressemblent les pipelines actuels des processeurs. Je sais que si le pipeline est suffisamment long, vous pouvez commencer une nouvelle instruction avant que la dernière instruction ne soit terminée, parfois dans le même cycle d'horloge, de sorte que votre cœur unique fait effectivement deux choses à la fois.
Mais il y a une astuce. Vous ne pouvez pas utiliser cette fonction pour accélérer la vitesse à laquelle votre processeur traite les instructions d'un programme spécifique. Un problème de correction se pose : l'instruction suivante peut dépendre du résultat encore indéterminé de l'instruction précédente. Pour tirer parti du long pipeline en toute sécurité Dans ce cas, la puce présentera deux cœurs de processeur distincts au planificateur du système d'exploitation et alternera les instructions envoyées à chaque cœur de façon à ce que deux instructions destinées au même "cœur" ne se trouvent jamais en même temps dans le pipeline. De cette manière, nous pouvons être sûrs que les instructions exécutées simultanément n'interféreront pas entre elles. C'est ce qu'on appelle hyperthreading .
Il convient de noter ici que si l'hyperthreading peut augmenter de manière significative la quantité de travail que vous obtenez de votre processeur, il est loin d'être aussi efficace que de disposer d'un nombre aussi élevé de cœurs physiques. En fonction de votre charge de travail, l'amélioration peut être de l'ordre de 15 % ou de 40 %. Dans certaines circonstances, vous pouvez même désactiver cette fonction afin que les autres cœurs aient un accès exclusif au cache L1/L2 pour ce cœur (c'est parfois le cas avec les serveurs de base de données dédiés).
Lorsque votre puce est annoncée comme ayant 2 cœurs avec 4 threads, cela signifie qu'il s'agit d'un processeur double cœur qui prend en charge l'hyperthreading.