私は、erlangプロセスと話すときに、異なるメッセージに異なる優先順位を割り当てることができると考えています。メッセージに異なる優先順位を付ける巧妙な方法はありますか?
私は高優先度のメッセージを最初に処理し、次に低優先度を処理できるようにしたいと考えています。
私が試したの異なるアプローチ、アプローチ1:
loop() ->
receive
{high, Msg} ->
Do something with the message,
loop()
after 0 ->
ok
end,
receive
{low, Msg} ->
Do something with the message,
loop()
after 0 ->
loop()
end.
これは仕事をしていませんが、それは遅い静かです。私は受信が、それが実行されるたびに「高い」メッセージがあるかどうかを見るためにすべてのメッセージを調べなければならないと思います。
アプローチ2:
また、私はその後、高キューのいずれかにメッセージを送信したり、メッセージは「フロントデスク」への最初のセット「フロントデスク」だったメディエーター型アプローチをやってみました低キュー、そして最終的にここilustratedとして、その後、低キューから、「労働者のスレッドが高キューfirskからジョブを要求し、そのキューは何も持っていない場合:
これは持っていました要求が異なるキューの先頭に到達するまで待たなければならないという欠点があります。おそらく何らかの優先順位システムが機能します。 )
このようなことを行うにはスマートな方法がありますか?
恐ろしい、Fhatは、私が「非重要」メッセージを読んで取得した後、履歴書を受信してい:-) –
探していただけで何でしたか?だから私が今重要なことがなければ、重要でないものを読んだ後も重要なものを待つのだろうか? – Bula