1.带超时的receive。
防止消息不来,receive语句陷入无限等待中。
只有超时的receive
功能:让当前进程暂停Tms。
sleep(T) ->
receive
after T ->
true
end.
超时时间为0的receive
超时时间为0的语句会立即触发一个超时,但在此之前,会尝试对邮箱进行模式匹配。
flush_buffer() ->
receive
_Any ->
flush_buffer()
after 0 ->
true
end.
程序分析:
触发超时之前,会先进行模式匹配,_Any匹配到,又会调用flush_buffer(),一直到清空进程邮箱中的所有消息。
没有超时子句,在邮箱为空情况下,flush_buffer()会永久暂停,不会返回。
priority_receive() ->
receive
{alarm,X} ->
{alarm,X}
after 0 ->
receive
Any ->
Any
end
end.
触发超时前,进行模式匹配时,如果没有消息与{alarm,X}匹配那么执行后面会接收邮箱中的第一个消息。如果没有消息,会在内层的receive上暂停,然后返回它受到的第一个消息。
只有在邮箱中的消息都进行过模式匹配后才会检查after段是否需要进行运算。
2.注册进程。
4个BIF管理注册进程。
register(AnAtom,Pid) AnAtom为原子。注册进程Pid为原子AnAtom。如果该原子被另一个进程注册,那么注册失败。
unregister(AnAtom)移除对应的注册信息。如果一个注册进程死亡,那么也会自动取消注册。
whereis(AnAtom) -> Pid | undefined 判断原子是否被注册,如果被注册,返回进程id,如果没有被注册,返回原子undefined.
registered() -> [AnAtom::atom()]返回系统中所有已经注册的名称列表。
上一篇: github使用小记
下一篇: golang在windows安装,vim配置,helloworld笔记
0 Responses so far.