2011-01-31 4 views
2

Disons qu'il y a deux processeurs sur une machine. Le thread A s'exécute sur P1 et le thread B sur P2.Threads et affinité CPU

thread A appelle Sleep(10000);

Est-il possible que lorsque le thread A commence à exécuter à nouveau, il fonctionne sur P2?

Si oui, qui décide de cette transition? Si non, pourquoi pas?

Le processeur stocke-t-il des données sur lesquelles tous les threads sont en cours d'exécution ou le système d'exploitation lie chaque thread à Processor pour sa durée de vie complète?

Répondre

1

C'est possible. Cela est déterminé par le planificateur de processus du système d'exploitation et peut également dépendre de l'application en cours d'exécution. Aucune information sur les threads en cours d'exécution n'est conservée par le processeur, à part ce qui se trouve dans le cache.

0

Cela dépend de beaucoup de choses, il se comporte différemment en fonction du système d'exploitation particulier. Voir aussi: Processor Affinity et Scheduling Algorithms. Sous Windows, vous pouvez épingler un processus particulier à un cœur de processeur via le gestionnaire de tâches.

0

Oui, c'est possible. Bien que finalement un thread hérite de son processeur (ou CPU core) du processus (exécutable.) Dans les systèmes d'exploitation, le processeur ou noyau de CPU un processus s'exécute pour ses quanta actuels (tranche de temps) est décidé par le planificateur:

http://en.wikipedia.org/wiki/Scheduling_(computing)

-Oisin

0

le système d'exploitation décide quel processeur pour exécuter le fil sur, et il peut facilement changer au cours de la durée de vie de ce fil, surtout s'il y a un changement de contexte (causé par le sommeil). Il est tout à fait possible si le système est chargé que les deux threads seront exécutés sur le même processeur (ou noyau), juste à des moments différents. Ou s'il n'y a pas de charge sur le système, les deux threads peuvent continuer à fonctionner sur des processeurs séparés.

Questions connexes