Erlang(11):进程
erlang的进程是指虚拟机管理的进程,而不是操作系统的重量级进程。
这些进程,创建和销毁都非常迅速;
进程之间发送消息非常快速;
进程在所有的操作系统上都具有相同的行为方式;
可以拥有大量的进程;
进程不共享任何内存,是完全独立的;
进程唯一的交互方式就是消息传递。
Pid = spawn(Mod, Func, Args)
创建一个新的进程来运行指定模块的指定参数。
Pid = spawn(Fun)
创建一个新的进程来执行Fun。
Pid!Message
向标记为Pid的进程发送消息,消息是异步的。
Pid!M返回M。因此可以连续发送消息Pid!Pid2!...!Msg
receive ... end
接收消息
self()获得当前进程的标识
rpc(remote procedure call)远程过程调用。封装了发送请求和等待响应的代码。
要和对应的receive配合
获得系统允许最大的进程数量
erlang:system_info(process_limit).
设置超时
注册进程(registered process),系统任何进程都能与这个进程通信。
register(AnAtom, Pid) 用一个字符串来注册某个进程。
unregister(AnAtom) 移除与AnAtom关联的所有注册信息,如果进程自身崩溃了,就会自动移除
whereis(AnAtom)->Pid|undefined 检测AnAtom是否已被注册
registered()->[AnAtom::atom()] 返回一个包含系统里所有注册进程的列表。
这些进程,创建和销毁都非常迅速;
进程之间发送消息非常快速;
进程在所有的操作系统上都具有相同的行为方式;
可以拥有大量的进程;
进程不共享任何内存,是完全独立的;
进程唯一的交互方式就是消息传递。
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()] 返回一个包含系统里所有注册进程的列表。
人生如戏,还是戏如人生?微信公众号:传说之路
csdn博客 http://blog.csdn.net/u012175089/article/list/2