Mac OS X serait-il capable de distribuer les processus aux différents cœurs d'un processeur Intel i7 Quad Core, même si les applications ne sont pas multithreadées ?
Réponses
Trop de publicités?Un thread est ce que le système d'exploitation voit et ce qu'il programme sur un cœur pour fonctionner.
Les programmes peuvent être mono ou multithreads. Ils peuvent également engendrer d'autres programmes et communiquer avec eux par le biais de techniques d'E/S au niveau du processus, telles que les tuyaux ou les poignées de fichiers, etc. Mais du point de vue du système d'exploitation, ces sous-programmes ne sont toujours que des collections de threads. Peu importe que le programme engendre plusieurs threads ou qu'il engendre des sous-processus : les deux approches représentent des threads au niveau du système d'exploitation que ce dernier tentera de programmer et d'exécuter aussi efficacement que possible, voire en parallèle.
Si vous disposez de plusieurs cœurs et que les threads d'un programme ne sont pas explicitement verrouillés sur un cœur, le système d'exploitation peut essayer de les exécuter en même temps, en parallèle, sur tous les cœurs dont il dispose dans la machine actuelle. Si plusieurs programmes sont en cours d'exécution, le système d'exploitation planifiera tous les threads sous-jacents sur tous les cœurs dont il dispose dans la machine actuelle.
Dans la pratique, il y a une certaine quantité d'E/S, de communication inter-processus ou inter-threads et de synchronisation qui doit se produire, ce qui peut bloquer les threads au niveau du système d'exploitation et empêcher les choses de fonctionner réellement en parallèle tout le temps. Par exemple : dans un programme multithread, deux threads peuvent extraire des valeurs d'une pile partagée pour effectuer un travail. L'accès à la pile doit donc être coordonné pour garantir la sécurité des threads, ce qui signifie qu'un seul thread peut extraire des valeurs de la structure de données de la pile à la fois. Il y a un goulot d'étranglement dans la conception du programme qui limite le parallélisme des threads à un seul ici et le système d'exploitation ne peut rien y faire.
Il en va de même pour les programmes qui génèrent des sous-processus. Il peut y avoir des problèmes d'E/S ou de synchronisation inter-processus qui empêchent tous les sous-processus créés de fonctionner réellement en parallèle en permanence.