2017-12-27 24 views
0

Ich habe gelesen, dass bei einer langen Ausführung in separaten Threads (parallel) die Leistung merklich verbessert wird, wenn Ihr PC mehrere Prozessorkerne hat. In C# gibt es eine Funktion Parallel.ForEach, die, wie ich verstehe, die lang laufende Operation in separaten Threads teilt, die auf jedem Prozessorkern ausgeführt werden. Wenn es jedoch nur einen Kern gibt, wird diese Funktion als einfache Schleife (synchron) ausgeführt. Wenn Sie mehr Threads als Prozessorkerne erstellen, kann dies sogar negative Auswirkungen haben.Verbessern Sie die Leistung von Programmen, indem Sie lange laufende Aufgaben in separate Prozesse aufteilen

Ich dachte an das Erstellen einer separaten Konsole-Anwendung, übergeben Sie args, um es und führen Sie es .exe auf mehrere Prozesse wie start -WindowStyle Hidden SeparateProcess.exe.

Edit:
Ich habe bereits eine Konsole App wie diese

class Program 
{ 
    static void Main(string[] args) 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      Thread.Sleep(200); 
      Console.WriteLine("" + i); 
     } 
     Console.WriteLine(); 
     Console.WriteLine(Guid.NewGuid() + ": Process finalized."); 
    } 
} 

Dann erstellt, mithilfe von Powershell es oft ausgeführt:

For ($i=0; $i -lt 10; $i++){ 
start -WindowStyle Normal SeparateProcess.exe 
} 

wird dieses Programm die Leistung verbessern, wenn sie auf einzelne lief Ader?

Hinweis: Die langfristige Aufgabe ist Emgu CV Bildverarbeitungsalgorithmus.

+0

Mit Multithreading können nicht nur mehrere Kerne genutzt werden. Abhängig davon, was die Anwendung und ihre Threads tun, kann eine Multithread-Anwendung, die auf einem einzelnen Kerncomputer ausgeführt wird, immer noch leistungsfähiger sein als eine Anwendung mit einem einzigen Thread, die auf einem einzelnen Kern ausgeführt wird. Ein großer Nachteil von mehreren Prozessen ist, dass sie Speicher oder Ressourcen nicht gemeinsam nutzen können, während ein einzelner Prozess mit mehreren Threads kann. – RavB

+0

Ihr Prozess ist nicht an die CPU gebunden - er schläft nur die meiste Zeit.Wie sieht die Verbesserung der Performance aus? Es wird immer noch 200 Millisekunden 100 Mal schlafen und etwa die gleiche Zeit dauern. Die Schreibvorgänge dauern alle die gleiche Zeit. –

+1

@RavB * Es gibt viele Gründe, mehrere Threads auf Maschinen zu verwenden, die nur einen einzigen Kern haben (schließlich wird das Threading seit vielen Jahrzehnten verwendet, während Multi-Core-Computer erst seit etwas mehr als einem Jahrzehnt gebräuchlich sind)), aber diese Gründe sind keine Leistung. Auf einer Single-Core-Maschine ist Multithreaded-Code immer * weniger * performant (da Sie die gleiche Arbeit erledigen, aber den Threading-Overhead haben), kann aber trotz des Threading-Overheads nützlich sein. – Servy

Antwort

1

Sie sollten sich überprüfen, indem es versucht, aber ...

Gibt es eine Möglichkeit, auch lange laufende Aufgabe Leistung zu verbessern, wenn es nur einen Kern?

Ja, aber offensichtlich nicht, indem es parallel läuft. Sie würden einen Leistungsanalysator für den Code verwenden, um herauszufinden, welche Teile die meiste Zeit benötigen, und versuchen, sie auf eine optimierte Weise neu zu schreiben.

EDIT basierend auf Kommentare:

Wenn Sie versuchen, Bildverarbeitung mit Lebenslauf und das, was Sie tun, ist CPU-gebunden (maxes den Prozessor beim Laufen) zu tun, dann ist es Parallelisierung nicht los um auf einem einzigen Kern zu helfen (sie werden miteinander um CPU konkurrieren).

Wenn das, was Sie tun, warten muss, bis I/O abgeschlossen ist, dann ermöglicht die Parallelisierung, dass ein Teil der Arbeit fortgesetzt wird, während andere Prozesse auf der I/O warten.

Es hängt davon ab, was Sie tun - Sie sollten diese Frage wahrscheinlich schließen und eine viel spezifischere mit Details über genau das, was Sie versuchen zu tun und CPU-intensive diese Aufgabe ist, fragen.

(BTW, wenn Sie können, ist eine Möglichkeit, die Bildverarbeitung schneller zu machen, das Bild vorher zu skalieren - viele Dinge, die Sie mit einem Bild machen könnten, funktionieren gut auf einer kleineren Version - zum Beispiel: Gesichtserkennung).

+0

Das Problem ist, dass es nicht mein geschriebener Code ist, der viel Zeit in Anspruch nimmt, es ist EmguCV Bildverarbeitungsalgorithmus. – Edgar

+0

Es braucht die Zeit, die es braucht (auch, es wird wahrscheinlich so schnell wie möglich sein - CV ist ziemlich gut geschrieben). –

Verwandte Themen