为什么在Erlang中需要spawn_link?

时间:2015-02-15 20:59:57

标签: erlang

据我所知,如果你生成后跟链接,那么这个过程可能已经同时死亡。为什么这是一个问题?无法链接,您是否尝试链接到已经死亡的流程?在这种情况下,它的行为就好像远程进程在链接被调用后立即死亡一样?

我认为如果你可以单独生成和链接,并且不必在一个原子函数中一起完成它们会很好,因为a)会使语言更正交(spawn_link与spawn和链接重叠)b )如果我有一个启动函数,它基本上只是spawn的包装器,我还需要提供start_link。所以非正交性是病毒式的。呸!

2 个答案:

答案 0 :(得分:7)

请记住,链接是双向的,因此请考虑流程A生成流程B但在能够链接到B之前死亡的情况。在这种情况下,B不知道它没有链接到A,它不会A死了就死了。

使用spawn_link这种情况不可能发生,因为生成和链接可以原子方式一起发生,或者它们都失败。

答案 1 :(得分:1)

另一个无法模仿的原因:

如果进程正在捕获退出信号,那么如果首先生成并尝试链接到立即死亡的进程,则失败的链接将导致{'EXIT',..., noproc}退出信号。

但是,如果使用spawn_link,退出信号将始终带有真正的退出原因。

相关问题