Ich möchte, dass dieser Code folgendermaßen funktioniert: Teilen Sie den ursprünglichen Strom in zwei genau in der Mitte; dann für jede Hälfte eine separate Berechnung, die berechnet 3 Dinge: die Länge (d. h. die Anzahl der Zeichen), die Anzahl der Wörter, die Anzahl der Zeilen. Ich möchte jedoch kein Problem haben, wenn Ich spalte fälschlicherweise ein Wort. Das muss sein gesorgt. Die Datei sollte nur einmal gelesen werden.
Wie soll ich die angegebenen Funktionen programmieren und den Operator | & gt; & gt ;? Ist es möglich?
Es sieht so aus, als würden Sie nach etwas fragen. Ich überlasse es Ihnen, die String-Manipulation herauszufinden, aber ich werde Ihnen zeigen, wie man einen Operator definiert, der eine Reihe von Operationen parallel ausführt.
Schritt 1: Schreiben Sie eine fuse
Funktion
Ihre Sicherungsfunktion scheint einen einzelnen Eingang mit mehreren Funktionen abzubilden, was einfach genug ist, um wie folgt zu schreiben:
%Vor%Beachten Sie, dass alle Zuordnungsfunktionen denselben Typ haben müssen.
Schritt 2: Definieren Sie den Operator, um Funktionen parallel auszuführen
Die standardmäßige parallele Kartenfunktion kann wie folgt geschrieben werden:
%Vor% Nach meinem Wissen wird Async.Parallel
asynchrone Operationen parallel ausführen, wobei die Anzahl paralleler Tasks, die zu einem gegebenen Zeitpunkt ausgeführt werden, der Anzahl der Kerne auf einer Maschine entspricht (jemand kann mich korrigieren, wenn ich falsch liege). Bei einer Dual-Core-Maschine sollten also höchstens zwei Threads auf dem Rechner laufen, wenn diese Funktion aufgerufen wird. Dies ist eine gute Sache, da wir keine Beschleunigung erwarten, indem mehr als ein Thread pro Kern ausgeführt wird (in der Tat könnte der zusätzliche Kontextwechsel die Vorgänge verlangsamen).
Wir können einen Operator |>>
in pmap
und fuse
definieren:
Also nimmt der Operator |>>
eine Menge Eingaben und bildet sie mit vielen verschiedenen Ausgaben ab. Wenn wir das alles zusammenfassen, erhalten wir folgendes (in fsi):
testOutput
enthält zwei Elemente, die beide parallel berechnet wurden.
Schritt 3: Aggregieren Sie Elemente zu einer einzigen Ausgabe
Okay, jetzt haben wir Teilergebnisse, die von jedem Element in unserem Array repräsentiert werden, und wir wollen unsere Teilergebnisse zu einem einzigen Aggregat zusammenführen. Ich nehme an, jedes Element im Array sollte die gleiche Funktion zusammengeführt werden, da jedes Element in der Eingabe den gleichen Datentyp hat.
Hier ist eine wirklich hässliche Funktion, die ich für den Job geschrieben habe:
%Vor% reduceMany
nimmt Sequenzen von n-Länge-Sequenzen und gibt ein n-Längen-Array als Ausgabe zurück. Wenn Sie sich eine bessere Möglichkeit vorstellen können, diese Funktion zu schreiben, seien Sie mein Gast:)
Um die Ausgabe oben zu dekodieren:
Schritt 4: Stellen Sie alles zusammen
%Vor%Tags und Links f# parallel-processing pipeline