最近在看mochiweb的源码,体验一下这个http server,看到里面有一个proc_lib:spawn_link/3。之前没注意过此函数,只是见过erlang模块下的spawn_link。下面我们这两个做一下对比。希望可以帮到需要人。
proc_lib:spawn_link/3(参见官方文档 )附图:
由上面图可知,这个函数就是创建一个新的进程,并执行指定函数写下的指定函数。这种创建进程的方式和直接使用spawn_link的方式类似。
那么我们什么时候使用proc_lib:spawn_link,什么时候使用spawn_link呢?这是本篇文章的主要内容。
下面我们通过coding来展示这两种方式的区别:
这里我们首先必须通过设置启动参数开启sasl,以便我们可以接收到发送给进程的错误信息。
开启方式 erl -boot start_sasl 效果如下图:
开启之后我们编写一个例子进行测试,看看这两种方式到底有什么区别
由此可以看出proc_lib:spawn_link这种方式会多一些信息,例如进程标识符,父进程信息,调用函数,进程退出原因等信息。
因此如果我们需要对某个进程的退出比较关心的话,推荐使用proc_lib:spawn_link。
谢谢大家的阅读,希望大家多多批评指正,大家一起努力。
参考:
上面这个链接是大神坚强2002的博客对proc_lib的分析,分析的很透彻,对我帮助很大,对此表示感谢。