Laden...

Programm auf zwei Prozessoren doppelt ausführen (Threading "light")

3 Antworten
1,478 Aufrufe
Letzter Beitrag: vor 14 Jahren
Programm auf zwei Prozessoren doppelt ausführen (Threading "light")

Hallo alle miteinander,

ich bin neu hier an Board und habe eine eigl. sehr einfache Frage auf die ich jedoch aufgrund meiner Unerfahrenheit in Sachen Threading keinerlei Lösung finde.

Konkret geht es um folgendes:
Ich habe eine SW geshrieben, welche aufgrund ihrer Ausgestaltung mehrfach separat ausgeführt werden muss.
Innerhalb der SW ist eine parallelisierung, auch aufgrund meiner schlechten Programmierung 😉, nicht möglich.

Daher kam ich auf die Idee die Ausführung der SW einfach mehrfach, entsprechend der Anzahl an verfügbaren CPU-Kernen, durchzuführen.

Ich strebe somit kein klassisches Threading an, sondern vielmerh den merhfachen Start des Gesamtsystems, um so die Auslastung auf nahezu 100% zu steigern. (Die Programme arbeiten unabhängig und behindern sich nicht bei mehrfacher Ausführung)

Hier meine Frage, kennt jemand eine Möglichkeit die SW innerhalb c# mehrfach, entsprechend der Prozessorenanzahl auszuführen?
Ich tippe darauf, dass dies ein sehr kleines Code-Snippet sein müsste, allerdings habe ich keinerlei Erfahrung in diesem Bereich und auch die Suche gab auf diese spezielle Frage keine Auskunft.

Über einen Tipp würde ich mich sehr freuen.

Viele Grüße
Hannibal5000

P.S. Ich hoffe ich habe alle Regeln zur Erstellung von Threads eingehalten. Ich bitte euch mir etwaige Fehler nachzusehen.

Hallo,

mit System.Environment.Processorcount kannst du die Anzahl der Prozessoren feststellen.

Mit der System.Diagnostics.Process-Klasse kannst du Prozesse starten.

Grüße, Koller.

Hallo Hannibal5000, willkommen im Forum!

aufgrund meiner Unerfahrenheit in Sachen Threading

Dann schau dir zB Threading in C# an.

Je nachdem was in der Main-Methode deiner Anwendung los ist könntest du hier für jeden Kern einen Thread starten. Wenns grob so ist:


class Program
{
    static void Main()
    {
        new Program().Run();
    }

    public void Run()
    {
        ...
    }
}

kann stat new Program().Run(); die Threads gestartet werden und jeder Thread führt die Run-Methode aus. Hier ist es angebracht keine ThreadPool-Threads zu verwenden, sondern mit Thread t = new Thread(..); t.Start zu arbeiten bzw. ab .net 4.0 mit Tasks und entsprechend mit der LongRunning-Option.

Da ich gerade .net 4.0 erwähnt habe wäre es hier noch komfortabler mit PLinq zu arbeiten, denn dort werden standardmäßig soviele Threads zur Ausführung verwendet wie Prozessorkerne vorhanden sind - irgendwie muss auch eingestellt werden können dass LongRunning gilt, wie weiß hab ich jetzt nicht im Kopf aber in der :rtfm:

Je nachdem wie "isoliert" die n-Anwendungen laufen sollen könnte in Erwägung gezogen werden für jede "Intanz" eine eigene AppDomain zu starten. Hiermit wäre im Fehlerfall die anderen AppDomains nicht betroffen und der "DomainManager" könnte die fehlerhaft Intanz zB erneut starten, usw.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"