Gibt es eine nicht-blockierende IO-Open-Source-Implementierung für die Scala-Akteure?

8

Ich habe ziemlich große Dateien, mit denen ich umgehen muss (500Meg + Zip-Dateien).

Gibt es nicht-blockierende IO-Open-Source-Implementierungen für die Scala-Akteure?

    
Roman Kagan 02.10.2009, 22:18
quelle

5 Antworten

6

Wenn ich Ihre Frage richtig verstanden habe, brauchen Sie nicht blockierende IO für Dateien. Ich habe dann schlechte Nachrichten für dich.

NIO

Java NIO in Java6 unterstützt nur die Blockierung beim Arbeiten mit Dateien. Sie werden dies möglicherweise daran bemerken, dass FileChannel dies nicht tut Implementieren Sie die SelectableChannel Benutzeroberfläche. (NIO unterstützt jedoch nicht blockierenden Modus für Sockets)

Es gibt eine NIO.2-Spezifikation ( JSR-203 ), mit der viele aktuelle Java-Limits überwunden werden sollen .io und NIO und bietet Unterstützung für asynchrone IO für Dateien. NIO.2 soll soweit ich verstehe mit Java 7 veröffentlicht werden.

Dies sind Java-Bibliotheksgrenzen, daher werden Sie auch in Scala darunter leiden.

Akteure

Die Actors basieren auf dem Fork-Join-Framework von Doug Lea (zumindest in der Zweigniederlassung 2.7.x bis zur Version 2.7.7 ). Ein Zitat aus der FJTask-Klasse :

  

Es gibt nichts, was wirklich verhindert   Sie blockieren innerhalb einer FJTask, und   sehr kurze Wartezeiten / Blöcke sind komplett   gut erzogen. Aber FJTasks sind nicht   entworfen, um willkürlich zu unterstützen   Synchronisation, da es keinen Weg gibt   um einzelne Aufgaben auszusetzen und wieder aufzunehmen   sobald sie mit der Ausführung begonnen haben.   FJTasks sollten auch endlich sein   Dauer - sie sollten nicht enthalten   Endlosschleifen. FJTasks, die könnten   müssen eine Sperraktion ausführen, oder   Halten Sie Sperren für längere Zeit, oder   Schleife für immer kann stattdessen normal erstellen   java Fädeln Sie Objekte ein, die dies tun.   FJTasks sind einfach nicht dazu gedacht   unterstütze diese Dinge.

Die FJ-Bibliothek wurde in Scala erweitert, um einem Akteur zu ermöglichen, wie ein Thread oder eine ereignisbasierte Aufgabe zu funktionieren, abhängig von der Anzahl der arbeitenden Threads und der "Bibliotheksaktivität" (Erklärung im technischen Bericht "< a href="http://lamp.epfl.ch/~peller/doc/haller07coord.pdf"> Akteure, die Threads und Events vereinheitlichen "von Philipp Haller und Martin Odersky).

Lösung?

Aber schließlich, wenn Sie blockierenden Code in einem Akteur laufen lassen, verhält es sich so, als ob es ein Thread wäre. Warum also nicht ein normales Thread für das Blockieren von Lesevorgängen verwenden und Ereignisse an ereignisbasierte Akteure aus diesem Thread senden? / p>     

Alexander Azarov 06.10.2009, 07:40
quelle
1

Sprechen Sie über Remote Schauspieler? Ein Standard Actor ist natürlich eine Intra-JVM-Entität. Mir ist keine NIO-Implementierung von entfernten Schauspielern bekannt, fürchte ich.

    
oxbow_lakes 03.10.2009 17:22
quelle
1

Hallo, ist das eine Option für dich? bigdata (R) ist ein Scale-Out-Speicher- und Computing-Fabric, der optionale Transaktionen, sehr hohe Parallelität und sehr hohe Gesamt-IO-Raten unterstützt.

Ссылка

    
streetparade 05.10.2009 19:14
quelle
1

Nicht, dass ich davon weiß, aber Sie könnten wahrscheinlich eine Menge davon bekommen, wenn Sie Naggati , ein Scala-Wrapper um Apache Mina. Mina ist eine Netzwerkbibliothek, die NIO verwendet, Naggati übersetzt dies in einen Scala-Stil der Codierung.

    
Kevin Peterson 06.10.2009 07:58
quelle
-1

Können Sie nicht einfach Javas NIO von scala verwenden?

    
xap4o 05.10.2009 12:04
quelle