Thread Priority



  • Hallo,

    ich lass 2 Threads laufen. Jetzt verändere ich die Priorität,
    aber es ändert sich rein gar nichts. Ist dem Scheduler egal was ich mach ?

    Thread1.Priority=Pritority.Highest;
    Thread2.Priority=Pritority.Lowest;
    


  • blurry333 schrieb:

    Hallo,

    ich lass 2 Threads laufen. Jetzt verändere ich die Priorität,
    aber es ändert sich rein gar nichts. Ist dem Scheduler egal was ich mach ?

    Thread1.Priority=Pritority.Highest;
    Thread2.Priority=Pritority.Lowest;
    

    Das sollte eigentlich viel bringen.
    Natürlich nur, wenn beide Threads ausgelastet sind. Wenn Thread1 eh meistens wartet, weil die Festplatte die Daten so langsam liefert, kann man den so nicht beschleunigen. Die Priorität sagt nur, wer bevorzugt drankommt, wenn beide sich um den Prozessor streiten.



  • Hallo blurry.

    Folgendes Programm verdeutlicht die Auswirkung unterschiedlicher ThreadPrioritäten in der Console.

    using System;
    using System.Linq;
    using System.Diagnostics;
    using System.Threading;
    
    namespace processpriority
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (Process p = Process.GetCurrentProcess())
                    p.PriorityClass = ProcessPriorityClass.RealTime;
    
                var threadPriorities = new[] { 115, 97, 103, 116, 32, 34, 71, 117, 116, 101, 32, 78, 97, 99, 104, 116, 34 };
    
                object locker = new object();
                Enumerable.Range(0, System.Environment.ProcessorCount).ToList().ForEach(
                    i =>
                    {
                        new Thread((priority) =>
                        {
                            Thread.CurrentThread.Priority = ThreadPriority.Highest;
                            Thread.CurrentThread.IsBackground = false;
    
                            while (true)
                            {
                                bool locking = Monitor.TryEnter(locker);
                                if (locking)
                                {
                                    Console.WriteLine("Thread {0} {1}", i, priority);
                                    Monitor.Exit(locker);
                                }
                            }
    
                        }).Start(threadPriorities.Select(c => ((char)c).ToString()).Aggregate((a, b) => a + b));
                    });
            }
        }
    }
    

Anmelden zum Antworten