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.
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
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. –
@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