2012-08-12 50 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

相关问题