2016-04-27 3 views
1

私はの初心者ですので、私はgen_serverについて問題があります。私はまだわかりませんcode_change()機能はどのように機能していますか?gen_serverモジュールでcode_change()関数がどのように機能しますか?

私の説明ができますか?

ありがとうございます。

+3

おそらく、[Erlangのgen_serverでコードをスワップする]の複製(http://stackoverflow.com/questions/1840717/achieving-code-swapping-in-erlangs-gen-server)。 –

+0

ありがとう、私は解決しました:) –

答えて

3

本当に簡単です。 gen_serverが実行されているときには、呼び出しの間に渡される状態(最後の引数はhandle_callhandle_castおよびhandle_info)が含まれます。これが2つの要素{a, b}のタプルで、release handlerでホットコードをアップグレードし、新しいコードで3つの要素のタプルがあるとします。{a, b, c}新しいコードが古い状態を使用する前に状態を変換する必要があります。

これはcode_changeで行います。 Release Handling Instructionsでは、update命令を指定してから、リリースハンドラがライブノードのコードをアップグレードするときに、code_change関数を呼び出して状態を変換します。状態が変換されている間、プロセスは一時停止され、新しい状態で再開されます。

リリースハンドラを使用してライブノードでリリースをリリースしていない場合は、おそらく心配する必要はありません。それでも、それは状態フォーマットを変更しなければならない場合にのみ使用されます。これはそれほど頻繁ではありません。

+0

大きな助けを感謝、Amiramix :) –

+0

あなたは大歓迎です!あなたの質問に答えるなら、あなたが答えを受け入れることができることを忘れないでください:) – Amiramix

関連する問題