Erlang gen_server の call/reply ベストプラクティス

Erlang Forum - Trap Exit ~ View topic - gen_server call and replyメーリングリストで、多くのレスポンスをさばけるように gen_server がなるべくブロックしない方法について書かれている。


要約すると

  1. レスポンスを返す処理が必要な情報を渡しつつ spawn してレスポンス作成プロセスを立ち上げる(A)
  2. handle_call では spawn 後、即座に no-reply を返す
  3. (A) はレスポンス作成後 gen_server:reply/2 で結果を返す

という方法。


言われてみれば当たり前なのだが、中々面白かった。
gen_server がブロックしてしまい、デッドロックになる問題が良く発生するのでぜひ利用したい。


ところで、この辺りの実用的な話はどこかにまとまっていないのかな。ML 見るのが正攻法?