1

私は の初心者なerlangので、 について問題がありgen_serverます。code_change()関数がどのように機能するかはまだ不明です。

説明してもらえますか?

よろしくお願いします。

4

1 に答える 1

3

本当に簡単です。が実行されている場合gen_server、呼び出し間で渡される状態が含まれます ( の最後の引数handle_callhandle_casthandle_info)。これが 2 つの要素を持つタプルであり、リリース ハンドラー{a, b}を使用してホット コード アップグレードを行い、新しいコードが 3 つの要素を持つタプルを想定していると言った場合、新しいコードが古い状態を使用する前に状態を変換する必要があります。{a, b, c}

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

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

于 2016-04-27T10:16:33.873 に答える