2012-08-12 52 views

回答

7

「我應該打擾」你的意思是,「我會冒內存泄漏嗎?」,或者「會導致數據丟失嗎?」,還是「影響客戶端看到和關閉連接的方式?

也就是說,出於客戶的考慮,發佈close命令被認爲是禮貌的。客戶端可能會在連接中看到突然中斷,而不是關閉。例如,如果它是一個web服務器,並且您發送關閉請求而不是,那麼某些瀏覽器會將其作爲管道中斷(錯誤)讀取,並立即嘗試重新連接。正確地關閉連接只是禮貌的,它將有助於保持您的代碼的邏輯組織(您知道正好您的所有資源如何處理)。

我不是100%確定erlang如何處理垃圾回收,但我可以說對於大多數編程語言(因此我假設erlang也是這樣),殺死進程將處理所有的與它相關聯的內存,所以應該沒有內存泄漏只是讓進程死亡。

但是,如果緩衝區中有潛在內容發送給客戶端,則可能希望使您的退出過程在關閉之前刷新緩衝區或連接,否則可能會導致數據丟失。

編輯:如legoscia提到,任何打開的文件描述符應該從容通過二郎處理,但它絕不會傷害(我把它叫做「良好做法」)退出進程之前,自己關閉它們。

+0

請記住,Erlang「進程」與OS「進程」不同,並且Erlang運行時可以在一個OS進程中運行許多Erlang進程。 – 2012-08-13 01:50:56

+1

但是Erlang進程的行爲卻類似:所有內存在進程活動結束時被釋放 – 2012-08-13 09:45:06

+0

當涉及套接字時,您還需要避免泄漏文件描述符。我*想*愛爾蘭照顧你,但如果我完全確定,我會張貼作爲回答:) – legoscia 2012-08-13 16:10:05

相關問題