Erlang进程的创建
程序员文章站
2022-07-15 22:54:32
...
个人理解:
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). false 6> Pid2 = testspawn:start2(). <0.51.0> 7> erlang:is_process_alive(Pid2). true 8> Pid2 ! pid2. pid2 9> erlang:is_process_alive(Pid2). false 10> Pid3 = testspawn:start3(). <0.56.0> 11> erlang:is_process_alive(Pid3). true 12> Pid3 ! test. test 13> erlang:is_process_alive(Pid3). true 14> Pid3 ! test1. test1 15> erlang:is_process_alive(Pid3). true 16>