5

Erlangでたくさんのチャットの例を見てきましたが、ワークキューのようなリストはどうですか?プロジェクト管理システムのようなワークキューシステムを構築したい場合、プロセスメールボックス内のメッセージを並べ替えることはできますか、それともメッセージの優先順位を使用する必要がありますか?Erlangで構築されたワークフローシステムの例はありますか?

4

3 に答える 3

8

Erlang のプロセス メッセージ キューでメッセージの順序を変更することはできません。

ただし、最も重要と思われるメッセージを最初に受信できる選択受信を行うことはできます。完全に同じというわけではありませんが、ほとんどの目的で機能します。

次に例を示します。

receive
    {important, Msg} ->
        handle(Msg)
after 0 ->
    ok
end,
receive
    OtherMsg ->
        handle(Msg)
end

次のものとは異なります。

receive
    {important, Msg} ->
        handle(Msg);
    OtherMsg ->
        handle(Msg)
end

{important, Msg}残りのメッセージの処理を続行する前に、常にメッセージ キュー全体をスキャンします。これは、これらの種類のメッセージが存在する場合、常に他のメッセージよりも先に処理されることを意味します。もちろん、これにはいくらかのパフォーマンス コストがかかります (キュー全体を 2 回スキャンするためにより多くの時間がかかります)。

于 2008-11-03T11:09:24.490 に答える
2

プロセスメールボックスは、ジョブキューの場合と同様に非常にうまく機能します。

選択的な受信パターンを簡単に記述できるように、メッセージに十分な情報を含めるだけで、メールボックスの内容を並べ替える必要がなくなります。

于 2008-11-13T02:04:00.097 に答える
2

メッセージの順序を変更する必要がある場合は、ゲートキーパーのパターンに従うことができます: メールボックスを別のプロセスとして具体化します。元のプロセスが別のメッセージの準備ができると、ゲートキーパーは、選択したルールに従って、転送するメッセージを計算できます。

于 2008-11-13T02:40:29.727 に答える