2016-04-27 76 views
1

我是erlang的新手,所以我有一個關於gen_server的問題。我還不清楚code_change()功能是如何工作的?code_change()函數如何在gen_server模塊中工作?

你能爲我解釋一下嗎?

感謝和問候。

+3

可能是[在Erlang的gen_server中實現代碼交換]的副本(http://stackoverflow.com/questions/1840717/achieving-code-swapping-in-erlangs-gen-server)。 –

+0

謝謝你很多,我已經resoled :) –

回答

3

真的很容易。當gen_server運行它包含的是調用之間傳遞的狀態(的最後一個參數handle_callhandle_casthandle_info)。如果這是一個元組有兩個元素{a, b}和你做release handler熱代碼升級和說,新的代碼期望的元組有三個元素{a, b, c}那麼你需要新的代碼可以使用舊的狀態之前的狀態轉換。

你做到這一點與code_change。在Release Handling Instructions指定update指令,然後,當發佈處理器升級活動節點上的代碼,它調用code_change功能狀態轉換。在轉換狀態時,進程暫停,然後以新狀態繼續。

你可能並不需要擔心的是,如果你不使用發佈處理器上做活動節點的版本升級。即使這樣,它也只能在狀態格式必須改變的情況下使用,這種情況並不常見。

+0

感謝您的大力幫助,Amiramix :) –

+0

非常歡迎你!不要忘記,如果它回答你的問題,你可以接受一個答案:) – Amiramix