Ich bin ein C# -Programmierer, und ich laufe in einige Thread Problem Problem.C# Diversifikation Thread gleichermaßen
Assets Einheiten sind, und ich brauche jede Anlage parallel laufen zu lassen, und ein Verfahren „doSomethingOnAsset“ laufen
Ich habe ein Programm, das 100 Gewinde (dh 1 Thread pro Asset ich es einige Manipulationen tue) hat . Im Allgemeinen hat jeder Thread den gleichen Zeitrahmen für jedes laufende Intrval, und jeder ruft "doSomethingOnAsset" -Methode auf.
Jedes Thread-Intervall läuft 10 Millisekunden (d. H.).
Ich möchte nicht so viele Threads, so dass ich eine Warteschlange für jedes Asset erstellen, aber beim Aufruf der zentralen Methode "doSomethingOnAsset" - die Threads nicht im gleichen Zeitrahmenintervall laufen.
, d.h. der 1. Thread-Laufintervallzyklus beträgt 300 Millisekunden. Der 2. Thread-Laufintervallzyklus beträgt 700 Millisekunden. der dritte Thread läuft Intervall Zyklus ist 2 Sekunden. ...
Was ist der beste Weg, um eine vordefinierte Methode 100mal parallel (der parallel Eintrag läuft ein externer Dienst sein kann, dass beim Laufen, ein Ereignis auslösen, die meinen Code von „doSomethingOnAsset“ läuft.
public void doSomethingOnAsset(object obj)
{
// infinite loop when thread.
while (true)
{
doSomething(obj);
Thread.Sleep(100);
}
}
public void doSomething(object obj)
{
// do something.
}
public void Run()
{
Thread t;
for (int i = 0; i < 100; i++)
{
t = new Thread(new ParameterizedThreadStart(this.doSomethingOnAsset));
t.Start(new object());
}
Console.ReadLine();
}
oder doSomething auf Ereignissignal rufen, wenn ein externes Programm Trigger.
Thanks :)
Randnotiz. Warum nicht 'Parallel.Für (...)'? 100-Threads explizit zu erstellen ist kein gutes Design. Etwa so: 'Parallel.For (0, 100, i => doSomethingOnAsset (i));' –
Entweder 'Parallel.For' verwenden oder alle mit dem Threadpool in die Warteschlange stellen oder mit Tasks, die Parallelität sollte automatisch erledigt werden . –
Haben Sie 100 Kerne? Dies klingt nicht nach einem guten Plan zur Optimierung des Durchsatzes. – spender