Si vous avez un processeur à quatre cœurs, vous pouvez avoir quatre threads matériels, ou huit threads matériels si votre processeur est hyperthreadé. Ce que cela signifie, c'est que vous pouvez potentiellement avoir huit threads qui s'exécutent en parallèle, ou en même temps.
Maintenant, vous vous demandez peut-être : si c'est vrai, comment suis-je capable de spawn des centaines de threads dans mon code C++ ? Eh bien, ce n'est qu'une illusion. Bien sûr, vous avez 100 threads, mais cela ne signifie pas qu'ils travaillent en même temps. Cela signifie simplement qu'ils sont là et que c'est à l'ordonnanceur de déterminer comment exécuter ces threads et pendant combien de temps (en fonction de la part de l'unité centrale et de la quantité d'entrées/sorties que chacun utilise, entre autres facteurs). Ces threads sont appelés threads de niveau noyau - le noyau les "voit" et sait qu'ils existent.
Maintenant, il y a une ligne vraiment floue entre les "threads logiciels" et les "threads matériels". Ce ne sont pas deux concepts, c'est la même chose - juste des threads. Gardez à l'esprit que si vous disposez d'un processeur qui prend en charge, disons, huit threads, la création de huit threads ne signifie pas qu'ils seront exécutés ensemble sur les huit cœurs. Le planificateur peut choisir de les exécuter tous sur seulement deux cœurs, mais vous avez quand même huit threads.