Je voudrais expérimenter avec des threads sur un processeur multicœur, par exemple pour créer un programme qui utilise deux threads différents qui sont exécutés par deux cœurs de processeur différents.
Cependant, il n'est pas clair pour moi à quel niveau les threads sont alloués aux différents cœurs. Je peux imaginer les scénarios suivants (selon le système d'exploitation et l'implémentation du langage de programmation):
- L'allocation des threads est gérée par le système d'exploitation. Les threads sont créés à l'aide d'appels système du système d'exploitation et, si le processus s'exécute sur un processeur multicœur, le système d'exploitation essaie automatiquement d'allouer / planifier différents threads sur différents cœurs.
- L'allocation des threads est gérée par l'implémentation du langage de programmation. L'allocation de threads à différents cœurs nécessite des appels système spéciaux, mais les bibliothèques de threads standard du langage de programmation gèrent automatiquement cela lorsque j'utilise l'implémentation de thread standard pour ce langage.
- L'allocation des threads doit être programmée explicitement. Dans mon programme, je dois écrire du code explicite pour détecter le nombre de cœurs disponibles et allouer différents threads à différents cœurs en utilisant, par exemple, les fonctions de bibliothèque.
Pour rendre la question plus précise, imaginez que j'ai écrit mon application multi-thread en Java ou C ++ sur Windows ou Linux. Mon application verra-t-elle et utilisera-t-elle plusieurs cœurs comme par magie lorsqu'elle est exécutée sur un processeur multicœur (car tout est géré soit par le système d'exploitation, soit par la bibliothèque de threads standard), ou dois-je modifier mon code pour connaître les cœurs multiples ?