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?
Wenn ich Ihre Frage richtig verstanden habe, brauchen Sie nicht blockierende IO für Dateien. Ich habe dann schlechte Nachrichten für dich.
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.
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).
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>
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.
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.
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.
Tags und Links scala frameworks parallel-processing nio