9

処理する必要のある非常に大きなファイル(500Meg以上のzipファイル)があります。

Scalaのアクター用のノンブロッキングIOオープンソース実装はありますか?

4

4 に答える 4

6

質問が正しければ、ファイルの非ブロッキングIOが必要です。それでは悪い知らせがあります。

NIO

Java6のJavaNIOは、ファイルを操作するときのブロック操作のみをサポートします。インターフェースFileChannelを実装していないという事実から、これに気付くかもしれません。SelectableChannel(ただし、NIOはソケットの非ブロッキングモードをサポートしています)

java.ioおよびNIOの現在の多くの制限を克服し、ファイルでの非同期IOのサポートも提供することを目的としたNIO.2(JSR-203 )仕様があります。NIO.2は、私が理解している限り、Java7でリリースされる予定です。

これらはJavaライブラリの制限であるため、Scalaでも同様に問題が発生します。

俳優

アクターは、Doug LeaのFork-Joinフレームワークに基づいています(少なくともブランチ2.7.xからバージョン2.7.7まで)。FJTaskクラスからの1つの引用:

FJTask内でブロックすることを実際に妨げるものは何もなく、非常に短い待機/ブロックは完全に適切に動作します。ただし、FJTasksは、実行を開始した個々のタスクを一時停止および再開する方法がないため、任意の同期をサポートするようには設計されていません。FJTasksの期間も有限である必要があります。つまり、無限ループを含めることはできません。ブロッキングアクションを実行したり、ロックを長期間保持したり、永久ループしたりする必要があるFJTasksは、代わりに、それを実行する通常のJavaスレッドオブジェクトを作成できます。FJTasksは、これらをサポートするようには設計されていません。

FJライブラリはScalaで拡張され、アクターがスレッドのように、または作業スレッドの数と「ライブラリアクティビティ」に応じてイベントベースのタスクのように機能できるようにする統一された方法を提供します(テクニカルレポート「スレッドを統合するアクター」で説明を見つけることができますおよびイベント」PhilippHallerおよびMartinOderskyによる)。

解決?

しかし、結局のところ、アクターでブロッキングコードを実行すると、スレッドであるかのように動作するので、Thread読み取りをブロックし、このスレッドからイベントベースのアクターにイベントを送信するために通常のコードを使用してみませんか?

于 2009-10-06T07:40:51.410 に答える
1

こんにちは、それはあなたのためのオプションですか?bigdata(R)は、オプションのトランザクション、非常に高い同時実行性、および非常に高い集約IOレートをサポートするスケールアウトストレージおよびコンピューティングファブリックです。

http://sourceforge.net/projects/bigdata/

于 2009-10-05T19:14:20.817 に答える
1

リモートアクターについて話しているのですか?もちろん、標準ActorはJVM内のエンティティです。私は恐れているリモートアクターのNIO実装を知りません。

于 2009-10-03T17:22:26.527 に答える
1

私が知っていることではありませんが、Apache MinaのScalaラッパーであるNaggatiを見ると、おそらく多くのマイレージを得ることができます。MinaはNIOを使用するネットワーキングライブラリであり、NaggatiはこれをScalaスタイルのコーディングに変換します。

于 2009-10-06T07:58:33.217 に答える