Wie lassen sich mehrere asynchrone Tasks parallel ausführen?

8

Was ist, wenn Sie mehrere asynchrone E / A-Aufgaben parallel ausführen müssen, aber sicherstellen müssen, dass nicht mehr als X-E / A-Prozesse gleichzeitig ausgeführt werden; und vor und nach E / A-Verarbeitungsaufgaben sollte keine solche Beschränkung haben.

Hier ist ein Szenario - sagen wir, es gibt 1000 Aufgaben; jeder von ihnen akzeptiert eine Textzeichenfolge als Eingabeparameter; wandelt diesen Text um (vor E / A-Verarbeitung) und schreibt dann den umgewandelten Text in eine Datei. Das Ziel besteht darin, dass die Vorverarbeitungslogik 100% der CPU / Kerne und den I / O-Teil der Tasks mit maximal 10 Grad Parallelität nutzt (maximal 10 gleichzeitig geöffnet, um Dateien gleichzeitig zu schreiben).

Können Sie einen Beispielcode für C # / .NET 4.5 bereitstellen?

Ссылка

    
Grief Coder 29.05.2012, 14:37
quelle

2 Antworten

8

Ich denke, TPL Dataflow zu verwenden, wäre eine gute Idee: Sie erstellen Pre- und Post-Process-Blöcke mit unbegrenzter Parallelität, einen Datei-Schreib-Block mit begrenzter Parallelität und verknüpfen sie miteinander. Etwas wie:

%Vor%

Wo WriteToFile() so aussehen könnte:

%Vor%     
svick 29.05.2012, 16:13
quelle
1

Es klingt, als würdest du einen Djikstra-Semaphor in Betracht ziehen, um den Zugriff auf das Starten von Aufgaben zu kontrollieren.

Das klingt jedoch nach einer typischen Warteschlange / einer festen Anzahl von Verbrauchern, die ein Problem darstellen, das eine geeignetere Methode zur Strukturierung sein kann.

    
Jeff Watkins 29.05.2012 14:40
quelle