Wie unterscheiden sich Akka und Async?

8

Ich bin zu einem sehr interessanten Vortrag über Async ( Ссылка ) gegangen, eine neue Bibliothek für Scala, worüber ich mir nicht sicher bin Wie unterscheiden sich Akka und Async?

Ich bin neu bei Scala und entschuldige mich, wenn die Antwort offensichtlich ist.

Danke.

    
user1463172 06.06.2013, 10:05
quelle

2 Antworten

19

Async vereinfacht die asynchrone und gleichzeitige Programmierung. Async ermöglicht die Programmierung mit nicht blockierenden APIs in einem vertrauten direkten Stil. Direkt-Stil-Code ist so einfach zu schreiben wie Blocking-Code, aber es hat alle Vorteile von effizienten nicht blockierenden Code.

Out-of-the-box, macht Async das Programmieren mit Scalas Zukunft bequemer. Durch die Verwendung von Async mit Futures wird Ihr einfach zu lesender Direct-Style-Code unter der Haube in einen hocheffizienten, nicht blockierenden Code umgewandelt. Async kann auch mit anderen APIs verbunden werden (siehe unten).

Akka bietet ein Programmiermodell und eine Laufzeitumgebung, um Nebenläufigkeit, Verteilung und Fehlertoleranz zu vereinfachen. Async bietet keine Laufzeitumgebung - es erleichtert die Verwendung vorhandener Abstraktionen und ihrer Laufzeiten. Async und Akka können jedoch auf mehrere wichtige Arten zusammenarbeiten:

  1. Mit Akkas "ask" -Muster senden Sie eine Nachricht mit "?" gibt eine Zukunft zurück. Async erleichtert die Arbeit mit diesen Futures.

  2. Async kann mit anderen APIs als Scala's Futures API verbunden werden. Dies eröffnet interessante Möglichkeiten, Async zu nutzen, um die Programmierung mit Akka-Akteuren zu vereinfachen. Dies ist ein Bereich, den wir in naher Zukunft bei Typesafe erforschen werden.

  3. Async ist ein Ersatz für die Dataflow-API von Akka einfacher und robuster. Async ist einfacher, weil es keine komplexen Typen einführt, die aus der Verwendung von Scalas CPS-Plugin stammen. Async ist robuster, da es gut mit Features wie Pattern-Matching und Try-Catch zusammenarbeitet, die von CPS / Akkas Dataflow-API nicht vollständig unterstützt werden. Außerdem wird eindeutig angegeben, wo Async nicht verwendet werden kann ( await kann nicht innerhalb von Schließungen, verschachtelten Klassen / Merkmalen / Objekten oder by-name-Argumenten vorkommen).

Weitere Async-Beispiele und Dokumentationen finden Sie in meiner neuesten Diskussion über Async und die Dokumentation auf der Async-Projekt-Website .

    
Philipp Haller 07.06.2013 16:48
quelle
5

Async fügt einfach hilfreiche API (und einige andere gute interne Dinge) für die Arbeit mit Future hinzu und hat nichts mit Actor-Modell zu tun, während Akka ein Framework für die massive Erstellung von Actors ist. Sie haben unterschiedliche Anwendungsfälle und haben nichts gemeinsam. Es ist korrekter, Async mit Scala / Akka Futures API zu vergleichen. Ich habe nicht viel Erfahrung mit Async, aber der Hauptpunkt ist, dass Sie zwei Konstrukte async und await haben. Async kennzeichnet einen asynchronen Block mit einem oder mehreren await Aufrufen, der einen Punkt markiert, an dem die Berechnung ausgesetzt wird, bis der erwartete Future abgeschlossen ist. Eine solche API kann mit einer Standardmethode zur Verwendung von map und flatmap verglichen werden.

Verwendung der Standard-API (für Konstrukt übersetzt in Kombination von map und flatmap ):

%Vor%

Und Async:

%Vor%     
4lex1v 06.06.2013 10:10
quelle

Tags und Links