2017-08-05 22 views
2

鳳凰框架上有一個應用程序。Elixir GenServer並行handle_call

GenServer需要檢查一些值。

驗證這些值是從控制器(一個請求來自客戶端,GenServer值檢查,客戶端收到響應)開始。

一旦handle_call是同步的,那麼當10個客戶端每次調用10次call_call時會發生什麼?所有的10個電話將被並行處理或按照隊列的順序處理?

回答

1

GenServer將只處理單個呼叫,其他消息將在郵箱中排隊。如果需要同步過程,您可以允許這樣做,但您必須考慮郵箱,它可能會在較重的負載上很快堆積起來,並可能在沒有任何警告的情況下終止虛擬機。

您是否考慮過使用Task?

+0

謝謝。因此使用GenServer對於這項任務來說是一個糟糕的主意。問題是我需要對第三方API進行幾次調用,然後處理並將結果返回給客戶端。顯然,我需要使用任務,或者在客戶端的請求處理線程中正確地調用這些調用 –

+0

嗯,這裏有什麼可以指導您決定何時使用它們。如果您的任務很短(只需一個電話,然後使用任務),但是當它是一個長時間運行的過程時,您應該使用GenServer並圍繞此建立監督樹。但是你需要認爲你真的需要同步呼叫嗎?消費者可以訂閱頻道或嘗試每5秒鐘使用一些「關聯ID」來獲取結果 –

相關問題