2012-10-08 10 views
7

業界の練習方法の中で、マルチスレッドのアプローチを使用してファイルを読み込むことが最善であることを知りたいと思います。 Javaでは、私は、次の種類の何かをするだろう:java vs scala - 別のスレッドでファイルを読み込む

class Reader { Result readFile(File file, Listener callback) } 
class Listener { void process(Result r) } 

Readerが結果を生成し、その後の作業スレッドをwithingからListenerをコールバックするために、別のスレッドを生成します。これは良いアプローチですか?これをScalaにどのように変換すればよいでしょうか?これを達成するための他の優れた仕組みがおそらくありますか?

+0

1つまたは複数のファイルを読み込もうとしているかどうかはわかりません(少なくとも私には)。ファイルがたくさんある場合は、Kim Stebelの答えが良いです。それが別のスレッドで処理された結果を必要とする1つのファイルであれば、もう1つの答えが良いと思われます。 –

+0

「より良い」とはどういう意味ですか?短いコード?おそらくそうだ。もっとパフォーマンスが良い?たぶんそうではありませんが、Scalaはたくさんのコードをバックグラウンドで生成しています。 –

+0

ファイル内のすべての行が同時に処理されるようにするには、並列コレクションでも行えます。 –

答えて

7

Scalaでは、並列コレクションを使用する方法があります。あなたはfiles.parを使用して並列コレクションにそれを回すと、処理を行うためにはマップを使用することができ

files:Seq[File] = ... 

:あなたはファイルのシーケンスを持っていると言います。マップは内部的にスレッドプールを使用してシーケンスの一部を同時に処理します。使用されるスレッドプールの種類はconfiguredです。

files.par.map(readFile).foreach(process) 
1

これは、別のアプローチが必要な場合は、Akkaの場合に適しているようです。

+0

Akkaはアクターフレームワークであり、afaikはJavaから使用できます。 javaのための他の俳優フレームワークもたくさんあります。 –

関連する問題