Scala俳優のメールボックススキャン時間を改善する方法
-
28-09-2019 - |
質問
Scalaの俳優の次の例を作成しました。 http://pastebin.com/pa3wvpky線で発生するスロットリング(SendMoneyメッセージの数を減らす)なし:
val processed = iterations - counter.getCount/2
if (processed < i - banksCount * 5) Thread.sleep(1)
このテストでのメッセージ処理は非常に遅い(特に銀行の関係者がほとんどいない場合)。
これは、ActorsのメールボックスにSendMoneyメッセージがいっぱいであり、ReadAccountresponseメッセージを受信するには長い時間がかかるためです(通常、メールボックスのほぼ終了で、メールボックス全体をスキャンする必要があります)。そのような場合のメールボックススキャン時間を改善する方法は?たぶん、いくつかのメッセージを優先度が高いと定義する可能性がありますか? 2つのメールボックスがあることは素晴らしいことです。1つは通常のメッセージ、もう1つは優先度の高いメッセージです。優先度の高いメールボックスを最初にスキャンすることができます。また、「返信」メソッドは、高優先度のメールボックスに自動的にメッセージを送信する可能性があります。または、通常のメッセージと応答用に2つのメールボックスを作成しますか?あなたの意見は何ですか?
よろしくwojciechdurczyński
解決
この問題に対する潜在的に良い解決策の1つは、Phillip Haller'sです 半透明関数, 、SCALAコンパイラが一致する式が一致するオブジェクトの種類に関する情報を反射的に公開するものです。その後、俳優のメールボックスはメッセージクラスによってインデックス付けされ、特にこの種の「干し草の針」シナリオでは、潜在的に劇的に高速になる可能性があります。
これが次のとおりです transluncentFunctionのAPI, 、ご覧のとおり、それは非常に簡単です。のようです 半透明プロジェクト しばらくの間休みを取っていましたが、すぐにまた拾うことを願っています!
他のヒント
Liftの俳優には、この優先順位付けが組み込まれているとまったく同じです。単一の「ACT」メソッドを無効にするのではなく、アクションの優先順位に応じて実装できる多くの異なる方法(正確な名前がわからない)があります。
これが解決するかどうかはわかりません スローダウンのスキャン ただし、問題