關於熱更新的東西

這幾天讀了這個blog,進一步深入的瞭解了關於erlang更新相關的東西

http://blog.csdn.net/mycwq/article/details/43372687


使用代碼更新的時候,有一點要注意

c:l()默認使用的do_purge(),do_purge有一個很危險的操作,就是會kill掉正在使用old代碼的進程。

old代碼是什麼呢?

當代碼加載進去的時候,erlang會爲這份“代碼"分配一塊內存保存,然後讓module的old指針指向的內容釋放,current指針只想這塊內存,同時把old指向原來的curr指針指向的內容。也就是說,erlang並不區分xxx.beam上的任何信息,是單純把代碼加載和替換。

爲了保證進程的安全執行,就需要先把使用old代碼的進程全部kill,然後把代碼"版本"數據更新。

所以使用的時候,一定要小心,免得連續的更新代碼導致進程被kill。








http://blogread.cn/it/article/5626?f=wb

發佈了75 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章