image

Aller plus loin avec les Threads

Lorsque l’on parle de Thread avec le framework .net, le reflexe naturel est de penser
au namespace System.Threading. Ce namespace contient en effet presque tout ce que
.net vous propose afin de gérer le multithreading.

Cela est peu connu et peu utilisé, mais il est possible de dépasser certaines limites
de la classe Thread en utilisant une classe auxiliaire ProcessThread présente quand
à elle dans System.Diagnostics. Cette classe fournit tout un tas de service interessant
comme la possibilité de définir l’affinité d’un thread afin de le faire exécuter sur
un processeur en particulier ce qui n’est pas possible à l’aide de la traditionnelle
classe Thread :

using System.Diagnostics;

namespace FurtherWithThreads
{
    class Program
    {
        static void Main(string[] args)
        {
            int threadId = AppDomain.GetCurrentThreadId();
            SetProcessorAffinity(threadId,1);
            while(true)
            {
                
            }
        }

        static void SetProcessorAffinity(int threadId, int processor)
        {
            var processorThread = (from ProcessThread t in Process.GetCurrentProcess().Threads
                                  where t.Id == threadId
                                  select t).Single();
            processorThread.ProcessorAffinity = (IntPtr) processor;
        }
    }
}

image image

Comme vous pouvez le constater le code s’exécute bien sur des cœurs différents comme
souhaité.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *