Erlang gen_server の call/reply ベストプラクティス
Erlang Forum - Trap Exit ~ View topic - gen_server call and replyのメーリングリストで、多くのレスポンスをさばけるように gen_server がなるべくブロックしない方法について書かれている。
要約すると
- レスポンスを返す処理が必要な情報を渡しつつ spawn してレスポンス作成プロセスを立ち上げる(A)
- handle_call では spawn 後、即座に no-reply を返す
- (A) はレスポンス作成後 gen_server:reply/2 で結果を返す
という方法。
言われてみれば当たり前なのだが、中々面白かった。
gen_server がブロックしてしまい、デッドロックになる問題が良く発生するのでぜひ利用したい。
ところで、この辺りの実用的な話はどこかにまとまっていないのかな。ML 見るのが正攻法?