Sur mon processeur quad core, il semble qu’un seul thread (sans fin en boucle) soit exécuté sur 2 cœurs simultanément. Pourquoi est-ce? Un seul thread ne devrait-il pas être exécuté sur un seul noyau?
Sur mon processeur quad core, il semble qu’un seul thread (sans fin en boucle) soit exécuté sur 2 cœurs simultanément. Pourquoi est-ce? Un seul thread ne devrait-il pas être exécuté sur un seul noyau?
Réponses:
Une seule bande de roulement peut être exécutée sur autant de noyaux que vous avez, mais elle sera limitée à un seul noyau en même temps.
Pensez-y comme une conversation téléphonique. Vous n'avez qu'un seul téléphone * 1 et vous devez continuer à parler au téléphone * 2 . Vous avez quatre personnes au bureau, chacune capable de parler * 3 . Rien ne vous empêche de donner le téléphone à une autre personne tout en prenant une pause toilettes.
Notez qu’une seule personne parle au téléphone en même temps .
* 1 Le téléphone est la bande de roulement simple.
* 2 Besoin de continuer à parler car il fonctionne sans fin.
* 3 Les quatre personnes sont ofc. les quatre noyaux.
Dans votre capture d'écran, je ne vois pas deux, mais quatre threads utilisant 4 cœurs en parfaite harmonie, un couple de cœurs utilisant plus leur processeur que l'autre, mais les hauts et les bas de tous les 4 cœurs sont plus ou moins synchronisés avec le mêmes segments de temps.
Cela ne ressemble pas du tout à un processus à un seul thread, mais plutôt à un processus à 4 threads. Cela nécessite plus d'examen.
L'outil à utiliser est Process Explorer . Après l'avoir lancé, vous pouvez cliquer avec le bouton droit de la souris sur les en-têtes de colonne et sélectionner d'autres colonnes si nécessaire.
Une fois que vous avez localisé le processus qui utilise ces processeurs, vous pouvez double-cliquer dessus et choisir l'onglet Threads pour voir combien de threads il a et ce qu'ils font (quels appels système ils utilisent).
S'il ne s'agit que de svchost.exe, il s'agit d'un service système identifiable. Le plus susceptible d’utiliser énormément le processeur est Windows Search.
Cet affichage dans votre publication vous indique le niveau d'activité de chaque cœur, mais il ne vous dit rien sur les processus / threads exécutés sur quel cœur.
Je soupçonne que lorsque votre programme à thread unique obtient sa "tranche de temps", le système d’exploitation l’exécute sur un noyau la moitié du temps et un autre noyau la moitié du temps. Peut-être qu’il fonctionne même sur les autres noyaux une petite partie du temps également.
En tant que boucle infinie, il utilise pleinement le cœur pendant toute la durée de sa tranche de temps, mais toute incrémentation temporelle de l’activité principale (dans le Gestionnaire des tâches) représentera BEAUCOUP PLUS de la durée de tranches de temps uniques.
Pour plus d'informations sur ce qui se passe, sélectionnez l'onglet Processus du Gestionnaire de tâches. Dans le menu Affichage, cliquez sur Sélectionner les colonnes, puis cochez la colonne "Threads". Puis, dans la colonne Nom de l’image, trouvez votre processus. Confirmez qu'il s'agit d'un seul thread.
Comme je suis assis ici avec pas beaucoup de "charge" sur ma boîte XP, 662 threads sont en cours d'exécution. Mon antivirus exécute 78 threads, Firefox en exécute 45, Dropbox en exécute 33. Winamp ne lit rien du tout pour le moment et il exécute toujours 17 threads. Toute incrémentation dans l'affichage du gestionnaire de tâches aurait pu avoir tous ces threads sur n'importe quel noyau.