2017-08-05 11 views
2

Phoenix Frameworkにはアプリケーションがあります。Elixir GenServer parallel handle_call

いくつかの値をチェックするGenServerが必要です。

これらの値の検証はコントローラから開始されます(要求はクライアントから来ており、GenServerの値チェックでクライアントは応答を受け取ります)。

一度handle_callが同期すると、10人のクライアントが一度に10回handle_callを呼び出すとどうなりますか? 10件の通話はすべて並行して処理されるか、キューの順番で処理されますか?

答えて

1

GenServerはシングルコールだけを処理し、他のメッセージはメールボックスにキューイングされます。これを許可するには、同期プロセスの必要があるが、メールボックスについて考える必要がある場合、重い負荷ですぐに積み重ねられ、おそらく警告なしにVMを強制終了する可能性があります。

タスクを代わりに使用することを検討しましたか?

+0

ありがとうございます。このため、GenServerを使用するのは悪い考えです。問題は、サードパーティのAPIをいくつか呼び出して処理し、その結果をクライアントに返す必要があることです。どうやら、私はタスクを使用するか、またはクライアントからのリクエスト処理スレッドでこれらの呼び出しを正しく行う必要があります。 –

+0

それぞれを使用するときには、何を決定するのがよいでしょうか。短いタスク(1回のコールとその後のレスポンスでTaskを使用)があっても、長時間実行されているプロセスの場合は、間違いなくGenServerを使用してその周りに監督ツリーを構築する必要があります。しかし、あなたは本当に同期呼び出しを本当に必要と思う必要がありますか?コンシューマは、チャンネルに登録するか、または5秒ごとに "相関ID"を使用して結果をフェッチするか、 –

関連する問題