Ich möchte die Task Parallel Library (TPL) in F # verwenden, um viele (> 1000) lange laufende Aufgaben auszuführen. Hier ist meine aktuellen Code:TPL Parallel.Für lange laufende Aufgaben
Parallel.For(1, numberOfSets, fun j ->
//Long running task here
)
Als ich dies beginnen, es scheint, dass .NET alle Aufgaben auf einmal und prallt zwischen ihnen löst sich ständig. Was wäre besser, wenn es bei einer Aufgabe bleibt, bis es fertig ist, bevor es zur nächsten geht. Dies würde die Kontextumschaltung minimieren.
Gibt es eine Möglichkeit, dem Scheduler einen Hinweis zu geben? Ich weiß, dass es möglich ist, Hinweise zu geben, aber ich kann keine klaren Beispiele finden, oder ist der Scheduler diesbezüglich schon schlau und es ist nur meine Wahrnehmung, dass es zu viele Kontextwechsel gibt. Danke für die Hilfe!
+1, Sekunden schneller als ich :) –
Sollte die MaxDegreeOfParallelism von der Anzahl der Kerne auf Ihrer Maschine abhängen? –
@Wallhood: wahrscheinlich ja, wenn die Aufgabe CPU-gebunden ist, wenn die Aufgabe IO-gebunden ist (Dateiverarbeitung, Zugriff auf eine DB) wahrscheinlich nicht. In unserem Fall funktionierte dieser Wert auf 2/4 Kernen in normalen Situationen gut, es gab keinen wirklichen Grund, etwas anspruchsvolleres zu versuchen - es ist kein Programm, das zum Beispiel auf einer 16-Kern-Super-Maschine läuft. – MiMo