Как работает функция code_change() в модуле gen_server?
Я новичок erlang
, Так что у меня есть проблема gen_server
, Я до сих пор неясно, как это code_change()
функция работы?
Можете ли вы объяснить для меня?
Спасибо и всего наилучшего.
1 ответ
Это действительно легко. когда gen_server
выполняется это содержит состояние, которое передается между вызовами (последний аргумент handle_call
, handle_cast
а также handle_info
). Если бы это был кортеж с двумя элементами {a, b}
и вы делаете горячее обновление кода с помощью обработчика релиза и говорите, что новый код ожидает кортеж с тремя элементами {a, b, c}
тогда вам нужно преобразовать состояние, прежде чем новый код сможет использовать старое состояние.
Вы делаете это с code_change
, В Инструкции по обработке релиза вы указываете update
инструкции, а затем, когда Release Handler обновляет код на живом узле, он вызывает code_change
функция для преобразования государства. Пока состояние преобразуется, процессы приостанавливаются, а затем возобновляются с новым состоянием.
Вам, вероятно, не нужно беспокоиться об этом, если вы не используете Release Handler для обновления релизов на живых узлах. И даже тогда он используется только в том случае, если необходимо изменить формат состояния, что не так часто.