Scalaでノンブロッキングメソッドを作成する良い方法はありますか?私が考えることのできる1つの方法は、スレッド/アクターを作成することです。メソッドはスレッドにメッセージを送信して返します。非ブロッキングメソッドを作成するより良い方法はありますか?Scalaで非ブロッキングメソッドを作成するには?
5
A
答えて
13
使用scala.actors.Future:
import actors._
def asyncify[A, B](f: A => B): A => Future[B] = (a => Futures.future(f(a)))
// normally blocks when called
def sleepFor(seconds: Int) = {
Thread.sleep(seconds * 1000)
seconds
}
val asyncSleepFor = asyncify(sleepFor)
val future = asyncSleepFor(5) // now it does NOT block
println("waiting...") // prints "waiting..." rightaway
println("future returns %d".format(future())) // prints "future returns 5" after 5 seconds
つ以上のパラメータを持つ関数を取るオーバーロード「asyncifyは」運動として残っています。
しかし、注意点の1つは例外処理です。 "非同期化"されている関数は、すべての例外をキャッチして処理する必要があります。関数からスローされた例外の動作は未定義です。
2
actorsについて学んでください。
2
「ブロックする」という定義によります。厳密に言えば、ロックの取得を必要とするものはブロックしています。アクタの内部状態に依存するすべての操作は、アクタのロックを取得します。これにはメッセージ送信が含まれます。多くのスレッドが一度にアクターにメッセージを送信しようとすると、それらは一列に並ばなければなりません。
本当にノンブロッキングが必要な場合は、java.util.concurrentにさまざまなオプションがあります。
実践的な観点から見ると、俳優は、同期した操作のどれも大量の作業をしないため、非閉塞に近いものを提供します。したがって、アクターがあなたの必要を満たす可能性があります。
1
私は先物に関してブログで非常に徹底した説明をしています。実際にあなた自身で先物を実装する方法を示しています。したがって、トピックについての非常に良い理解が得られます。私はあなたがそれを読むことをお勧め:
あなたのコーヒーをお忘れなく!
関連する問題
- 1. intellij - 作成するScalaプロジェクト、Scala-Scala、Scala-SBTはどれですか?
- 2. Play 2(scala)でカスタムフィールドコンストラクタを作成する
- 3. Scalaでリストを作成する
- 4. Scalaでベクターを作成する
- 5. ScalaでCanBuildFromを作成する
- 6. EclipseでScalaスクリプトファイルを作成
- 7. スレッドローカルオブジェクトをscalaに作成
- 8. ScalaでJSONオブジェクトを作成するには?
- 9. ScalaでEnum型を動的に作成する方法は?
- 10. Scalaで型安全なフィルタリングを作成するには?
- 11. Java/ScalaでPDF/DOCXファイルを作成するには?
- 12. Scalaプロジェクトを適切な方法で作成するには?
- 13. Scala:ジェネリッククラスの型パラメータの要件を作成するには?
- 14. Scalaサドル:動的にVecまたはシリーズオブジェクトを作成する
- 15. ScalaでカスタムSeqコレクションを作成
- 16. Scalaクラスは作成後に変更できますか?
- 17. 非ジェネリッククラスでジェネリックを作成する
- 18. WCF操作で非同期/バックグラウンドプロセスを作成する方法は?
- 19. iOSで非同期スレッドクラスを作成するには?
- 20. デルファイで非長方形のボタンを作成するには?
- 21. Pythonで非同期ジェネレータを作成するには?
- 22. JavaScriptで非表示の<img>を作成するには?
- 23. UWPでSQlite非同期を作成するには?
- 24. BitmapFrameを非同期で非同期メソッドで作成する
- 25. dateRangeの作成Scala、Joda、Java
- 26. Scalaレポートプロジェクトの作成方法
- 27. Scala Mockオブジェクトの作成
- 28. ScalaでAkkaアクターが作成されたことをテストするには
- 29. Scalaで任意のコレクションの汎用暗黙クラスを作成するには?
- 30. Scalaのリフレクションでパラメータコンストラクタを使用してクラスを作成する