したがって、Scalaでは、次のようなJavaファイルストリームライブラリを使用すると、次のようになります。
inStream = Option(new FileInputStream(file))
..
in.read(imageData)
Some(imageData)
これによりブロッキング操作が発生しますか?言い換えれば、これをFutureでラップして、非同期にする必要がありますか?
ありがとう、
したがって、Scalaでは、次のようなJavaファイルストリームライブラリを使用すると、次のようになります。
inStream = Option(new FileInputStream(file))
..
in.read(imageData)
Some(imageData)
これによりブロッキング操作が発生しますか?言い換えれば、これをFutureでラップして、非同期にする必要がありますか?
ありがとう、
ブロッキング操作です。
でラップしてFuture
もファイル操作は非同期になりませんが、Future
エグゼキュータサービス/スレッドプールからのスレッドが拘束されます...
補遺
JVMでのすべての実行は、スレッドで行われます。カプセル化された計算が行われるスレッドを使用する場合Future
、それを開始したスレッドとは異なりFuture
ます。古いものを使用するjava.io
と、直接呼び出すか、に渡すかに関係なく、操作がブロックされますFuture
。
同時実行性の高いシステムを作成することを目的としている場合は、ブロッキング操作をまったく行いません。とアクターを使用すると、I / O操作自体が非ブロッキングである場合にのみFuture
、スレッドごとのI/O操作の高いオーバーヘッドなしで高い同時実行性を実現できます。