2009-09-17 5 views
4

En C#, lorsque je crée un nouveau thread et que j'exécute un processus sur ce thread, est-il possible de l'affecter à un core particulier? Ou le système d'exploitation gère-t-il tout cela automatiquement? J'ai écrit une application multi-thread et je veux juste être sûr qu'il est optimisé pour la fonctionnalité dual/quad core.Utilisation de la technologie Dual/Quad Core

Merci

Répondre

7

Vous pouvez forcer votre fils à courir sur des noyaux spécifiques, mais en général, vous devez laisser le système d'exploitation en prendre soin. Le système d'exploitation en gère une grande partie automatiquement. Si quatre threads s'exécutent sur un système quadricœur, le système d'exploitation les planifie sur les quatre cœurs sauf si vous prenez des mesures pour l'empêcher. Le système d'exploitation fera également des choses comme essayer de garder un thread individuel fonctionnant sur le même noyau plutôt que de les déplacer pour de meilleures performances, ne pas planifier deux threads en cours d'exécution sur le même noyau hyperthreaded s'il y a des cœurs inactifs disponibles, etc.

De même, plutôt que de créer de nouveaux threads pour le travail, vous devez utiliser le thread pool. Le système adaptera cela au nombre de processeurs disponibles sur le système.

Windows Internals est un bon livre pour couvrir le fonctionnement du planificateur Windows.

1

This post montre comment définir l'affinité du processeur pour un thread de processus particulier. Vous pouvez utiliser cette propriété pour limiter l'affinité d'un thread à un processeur ou un ensemble de processeurs particulier.

0

Plusieurs threads s'exécuteront généralement sur plusieurs cœurs ou processeurs. Par défaut, c'est le sheduler de Windows qui affecte les threads aux processeurs.

5

En fonction de votre question vous serez probablement intéressé par l'extension .NET 4 task parallel library (TPL). Jetez un oeil à ce article.