Erlang进程的创建
个人理解:
1、start1/0 创建的进程 创建结束后立即消失
2、start2/0 创建的进程 创建结束后再收到一次消息后立即消失
3、start2/0 创建的进程 创建结束后可以多次接受消息
造成这三者的区别关键是与receive的写法。
是否可以理解为一个进程的生命周期是receive--end?
测试代码:
?
1 -module(testspawn). 2 -compile(export_all). 3 start1()-> 4 spawn(?MODULE,hello1,[]). 5 6 start2()-> 7 spawn(?MODULE,hello2,[]). 8 9 start3()-> 10 spawn(?MODULE,hello3,[]). 11 12 hello1()-> 13 ok. 14 15 hello2()-> 16 receive 17 T -> 18 T 19 end. 20 21 hello3()-> 22 receive 23 T -> 24 T, 25 hello3() 26 end.
测试结果:4> Pid1 = testspawn:start1().
<0.48.0>5> erlang:is_process_alive(Pid1).false6> Pid2 = testspawn:start2(). <0.51.0>7> erlang:is_process_alive(Pid2).true8> Pid2 ! pid2.pid29> erlang:is_process_alive(Pid2).false10> Pid3 = testspawn:start3(). <0.56.0>11> erlang:is_process_alive(Pid3).true12> Pid3 ! test.test13> erlang:is_process_alive(Pid3).true14> Pid3 ! test1. test115> erlang:is_process_alive(Pid3).true16> ?
?
?