Mischen paralleler Sammlungen mit Akka

8

Wie gut skalieren Sie parallele Sammelvorgänge mit der Parallelität / Parallelität von Akka Actors (und Futures) in Bezug auf eine effiziente Planung auf dem System?

Die Ausführung von Actors und Futures wird von einem ExecutionContext gehandhabt, das normalerweise von Dispatcher bereitgestellt wird. Was ich bei parallelen Sammlungen finde, zeigt an, dass sie ein Objekt TaskSupport verwenden. Ich habe ein ExecutionContextTaskSupport -Objekt gefunden, das die beiden verbindet, bin mir aber nicht sicher.

Was ist der richtige Weg, um die beiden Lösungen für den gemeinsamen Zugriff zu mischen, oder wird es nicht empfohlen?

    
vossad01 27.01.2014, 15:59
quelle

1 Antwort

3

Gegenwärtig wird dies nicht gut unterstützt.

Vor Scala 2.11-M7 löst der Versuch, den Dispatcher als ContextExecutor zu verwenden, eine Ausnahme aus.

Das heißt, der folgende Code im Empfang eines Actors wirft ein NotImplementedError :

%Vor%

Übrigens wurde dies in 2.11-M7 behoben, obwohl es nicht gemacht wurde, um das obige Problem zu korrigieren.
Beim Lesen der Anmerkungen zum Fix scheint es, als ob die Implementierung, die von ExecutionContextTaskSupport im obigen Fall bereitgestellt wird, etwas Overhead haben könnte, anstatt direkt eine der anderen TaskSupport-Implementierungen zu verwenden. Ich habe jedoch nichts unternommen, um diese Interpretation zu überprüfen oder die Größenordnung eines Einflusses zu bewerten.

Hinweis zu parallelen Sammlungen:
Standardmäßig verwenden parallele Sammlungen den globalen ExecutorContext ( ExecutionContext.Implicits.global ) genauso wie Sie für Futures verwenden. Während dies sich gut verhält, wenn Sie vom Dispatcher eingeschränkt werden möchten (mit context.dispatcher ) - wie es bei Futures in Akka der Fall ist - müssen Sie einen anderen TaskSupport festlegen, wie im obigen Codebeispiel gezeigt.

    
vossad01 30.01.2014, 14:02
quelle