3

したがって、Scalaでは、次のようなJavaファイルストリームライブラリを使用すると、次のようになります。

inStream = Option(new FileInputStream(file))
  ..
  in.read(imageData)
  Some(imageData)

これによりブロッキング操作が発生しますか?言い換えれば、これをFutureでラップして、非同期にする必要がありますか?

ありがとう、

4

1 に答える 1

4

ブロッキング操作です。

でラップしてFutureもファイル操作は非同期になりませんがFutureエグゼキュータサービス/スレッドプールからのスレッドが拘束されます...

補遺

JVMでのすべての実行は、スレッドで行われます。カプセル化された計算が行われるスレッドを使用する場合Future、それを開始したスレッドとは異なりFutureます。古いものを使用するjava.ioと、直接呼び出すか、に渡すかに関係なく、操作がブロックされますFuture

同時実行性の高いシステムを作成することを目的としている場合は、ブロッキング操作をまったく行いません。とアクターを使用すると、I / O操作自体が非ブロッキングである場合にのみFuture、スレッドごとのI/O操作の高いオーバーヘッドなしで高い同時実行性を実現できます。

于 2013-03-25T16:23:59.840 に答える