Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如果Pid即将死亡,我是否需要关闭套接字连接?_Erlang - Fatal编程技术网

Erlang 如果Pid即将死亡,我是否需要关闭套接字连接?

Erlang 如果Pid即将死亡,我是否需要关闭套接字连接?,erlang,Erlang,当Pid失效时,它将释放与其关联的所有文件句柄/端口。如果进程即将死亡,我是否应该费心调用gen_tcp:close或ssl:close之类的东西,即使它是最后一个操作?所说的“我应该费心”是指“我会有内存泄漏的风险吗?”,或“它会导致数据丢失吗?”,或“它会影响客户端查看和关闭连接的方式吗?” 尽管如此,出于客户的考虑,发出关闭命令被认为是礼貌的。客户端可能会看到连接突然中断,而不是关闭。例如,如果它是web服务器,而您没有发送关闭消息,则某些浏览器会将其视为管道中断(错误),并立即尝试重新连

当Pid失效时,它将释放与其关联的所有文件句柄/端口。如果进程即将死亡,我是否应该费心调用gen_tcp:close或ssl:close之类的东西,即使它是最后一个操作?

所说的“我应该费心”是指“我会有内存泄漏的风险吗?”,或“它会导致数据丢失吗?”,或“它会影响客户端查看和关闭连接的方式吗?”

尽管如此,出于客户的考虑,发出关闭命令被认为是礼貌的。客户端可能会看到连接突然中断,而不是关闭。例如,如果它是web服务器,而您没有发送关闭消息,则某些浏览器会将其视为管道中断(错误),并立即尝试重新连接。正确地关闭连接只是出于礼貌,这将有助于保持代码的逻辑组织(您确切地知道如何处理所有资源)

我不能百分之百确定erlang如何处理垃圾收集,但我可以说,对于大多数编程语言(因此我也假设erlang),杀死进程将处理与它相关的所有内存,因此,让进程死亡不应该有内存泄漏

但是,如果缓冲区中还有潜在的内容要发送到客户端,则可能需要执行退出过程,以便在关闭缓冲区或连接之前刷新它,否则可能会导致数据丢失


编辑:正如Legocia所提到的,任何打开的文件描述符都应该由erlang优雅地处理,但在退出进程之前自己关闭它们(我称之为“良好实践”)是没有坏处的。

请记住,erlang“进程”与OS“进程”不同,Erlang运行时可以在一个操作系统进程内运行多个Erlang进程,但Erlang进程的行为确实类似:进程live End上释放了所有内存当涉及套接字时,您还需要避免泄漏文件描述符。我想Erlang会帮你解决这个问题,但如果我完全确定的话,我会把它作为一个回答:)