J'analyse une application de bureau .net. J'ai trouvé ce code:L'équilibrage de charge étrange sur une machine de processus multicœur
if (System.Environment.ProcessorCount > 1)
{
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(2);
}
else
{
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.AboveNormal;
}
Process.GetCurrentProcess().PriorityBoostEnabled = true;
J'ai lancé cette application sur la machine qui a le processeur multi-cœur (4):
Comme on peut le voir les charges d'application que le second noyau (voir code), mais en même temps je ne peux rien faire sur mon ordinateur même si 3 cœurs sont en veille.
Qu'est-ce qui se passe? Est-il sensé d'exécuter une application en utilisant le cœur particulier?
AJOUTÉE
Il y a une autre application (2) qui peut contenir le temps processeur de repos. Cela fonctionne avec une haute priorité et je ne peux pas changer son réglage. Donc, cette application devrait être en concurrence avec celle-là.
Je ne connais pas votre problème observé. Mais en général, les threads/programmes intensifs de calcul devraient fonctionner en priorité normale ou inférieure et jamais en priorité plus élevée. La haute priorité est pour les choses qui sont bon marché sur les besoins de fonctionner régulièrement/avec une faible latence. – CodesInChaos
Que fait votre programme? Accéder à n'importe quelle mémoire, disque ou autre E/S? Les processeurs/cœurs ne sont pas les seules ressources partagées. – Justin
Le niveau de priorité «supérieur» n'est jamais recommandé, à moins que cela ne soit absolument nécessaire car d'autres applications sont trop exigeantes. Essayez à nouveau sans la priorité accrue; Votre système devrait être plus réactif alors. Sinon, quelque chose d'autre prend vos ressources. – pyrocumulus