内容简介:erlang进程与操作系统进程不同,erlang进程的切换、生成和消息传递是由erlang虚拟机管理的。是erlang 并发单元的一个代称。 每个进程代表一个持续的活动,执行某一段代码。在执行完毕后自动退出。erlang进程的创建由第二种方法要求给定的函数必须事先从模块中导出,并且初始数据只能由参数列表传入。同时,
erlang进程
erlang进程与操作系统进程不同,erlang进程的切换、生成和消息传递是由erlang虚拟机管理的。是erlang 并发单元的一个代称。 每个进程代表一个持续的活动,执行某一段代码。在执行完毕后自动退出。
创建、链接进程
erlang进程的创建由 spawn()
函数完成, spawn()
常用的有以下两种形式。
- spawn(Fun()).
- spawn(Module,Function,ListOfArgs).
- spawn_link(Fun()).
- spawn_link(Module,Funtion,ListOfArgs).
第二种方法要求给定的函数必须事先从模块中导出,并且初始数据只能由参数列表传入。同时, 第二种方法总是采用模块的最新版本。
这些函数均返回新进程的Pid。 spawn_link(...)
将创建的进程与原进程链接起来,确保这两个操作为原子操作。
如果两个进程互相连接,则一个进程终止时会像另一个进程发错误信号 {'EXIT',Pid,Reason}
。
创建链接的函数为 link(Pid)
,它将当前进程与Pid链接起来。
监视进程
链接的替代品。一种单向链接。由一下几种函数完成
- spawn_monitor(Fun()).
- spwan_monitor(Module,Function,ListOfArgs).
被监视的进程退出会发消息给监视进程,监视进程退出则对被监视进程无影响。
退出进程
1、抛出异常终结进程。
exit(Reason)
除非被进程捕获,否则该调用将令进程停止,并将 Reason
作为退出信号的一部分发送给所有与该进程相链接的进程。
2、直接向进程发送退出信号
exit(Pid,Reason)
该信号终止的是接收方。发送该信号时,收发双方无需链接。
如果 Reason
是原子 kill
,则接受方无法捕捉该信号,会被强制终止。
3、设置trap_exit标志
process_flag(trap_exit,true)
默认情况下,进程收到链接的其他进程的退出信号就会退出。设置trap_exit标志可以避免这种情况。设置该标志后,除了无法捕捉的信号外,其他的外来退出信息都会被转换成无害的消息。
进程间消息的传递
receive
Pattern1 when Guard1 ->
%% do some thing
Pattern2 when Guard2 ->
%% do some thing
after Time ->
%% do some thing
end
上面代码中的关卡是为了提取部分信息,如果省略则会接受所有消息。
after
段也是可选的,如果省略, receive
永不超时。否则 Time
必须是表示毫秒数的整数或原子 infinity
。如果 Time
为0。则 receive
永不阻塞,如果为 infinity
,则 receive
永不超时。
注册进程
register(name,Pid)
用于给进程绑定一个名字。方便对进程的操作。
消息投递与信号
进程间信息传递除了用消息投递符 !
以外还有进程发出的 退出信号
和尝试链接两个进程时的 链接请求
。
传递消息时,以下基本传递保障时对所有信号成立的
- 如果进程A向进程B先后发送了S1和S2。无论信号间隔由多久,这两个信号都将按照发送顺序到达。
- 尽力投递所有信号。
进程字典
进程自身状态的一部分,每个进程都有一个私有的进程字典。这是一个可以用任何值作为键的简单哈希表,用于存储Erlang项。
通过内置函数 put(key,value)
和 get(key,value)
可以从中存取项。
尽量使用Ets表。不要使用进程字典 。
erlang fun函数
erlang将函数视为数据。将函数封装成数据的对象称为fun函数(C++中的lamada表达式或者闭包)
函数有命名函数和匿名函数
命名函数可以直接通过函数名调用,也可以用来给其他函数当参数。
匿名函数的形式为 fun()-> end
.匿名函数必须与变量绑定,或者作为参数传递给其他函数,或者作为函数返回值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Everything Store
Brad Stone / Little, Brown and Company / 2013-10-22 / USD 28.00
The definitive story of Amazon.com, one of the most successful companies in the world, and of its driven, brilliant founder, Jeff Bezos. Amazon.com started off delivering books through the mail. Bu......一起来看看 《The Everything Store》 这本书的介绍吧!