erlang的進程是指虛擬機管理的進程,而不是操做系統的重量級進程。
這些進程,建立和銷燬都很是迅速;
進程之間發送消息很是快速;
進程在全部的操做系統上都具備相同的行爲方式;
能夠擁有大量的進程;
進程不共享任何內存,是徹底獨立的;
進程惟一的交互方式就是消息傳遞。
Pid = spawn(Mod, Func, Args)
建立一個新的進程來運行指定模塊的指定參數。
Pid = spawn(Fun)
建立一個新的進程來執行Fun。
Pid!Message
向標記爲Pid的進程發送消息,消息是異步的。
Pid!M返回M。所以能夠連續發送消息Pid!Pid2!...!Msg
receive ... end
接收消息
receive
Pattern1 [when Guard1]->
Expressions1;
Pattern2 [when Guard2]->
Expressions2;
...
end
self()得到當前進程的標識
rpc(remote procedure call)遠程過程調用。封裝了發送請求和等待響應的代碼。
rpc(Pid, Request)->
Pid!{self(), Request},
receive
{Pid, Response}->
Response
end.
要和對應的receive配合
loop()->
receive
{From, ...}->
From!{self(), ...}
loop();
...
end.
得到系統容許最大的進程數量
erlang:system_info(process_limit).
設置超時
loop()->
receive
...
after Time->%設置超時的時間
Expressions
end.
註冊進程(registered process),系統任何進程都能與這個進程通訊。 register(AnAtom, Pid) 用一個字符串來註冊某個進程。 unregister(AnAtom) 移除與AnAtom關聯的全部註冊信息,若是進程自身崩潰了,就會自動移除 whereis(AnAtom)->Pid|undefined 檢測AnAtom是否已被註冊 registered()->[AnAtom::atom()] 返回一個包含系統裏全部註冊進程的列表。