Erlang并发

Erlang进程间不共享内存,通信通过消息传递。进程可通过spawn创建,使用send发送异步消息,receive接收消息。错误检测通过进程链接实现,当链接的进程消亡时,其他进程会收到通知。Erlang核心是客户/服务器架构,支持超时的receive语句,且每个进程有自己的邮箱。注册进程便于通信,同时介绍了解决超时和异常退出的策略。
摘要由CSDN通过智能技术生成
erlang进程之间没有共享内存,每一个进程都有它自己的内存,想要修改其他进程的内存,你只能向它发送一条消息。

erlang的进程不共享内存,没有锁的概念。

erlang的错误侦测机制:进程之间可以相互链接。如果一个进程消亡,那么跟这个进程有链接的进程会得到一条消息,被告诉进程已经消亡,及其原因。

erlang进程的三个原语:spawn,send,receive.

Pid = spawn(Fun):创建一个新的并发进程。对于Fun求值,返回一个Pid,可以使用Pid向进程发送消息。

Pid!Message:想标识符为Pid的进程发送消息,消息发送是异步的。!是发送消息符。它的返回值是它发送消息的本身。

receive...end:接收一个发送给当前进程的消息。
语法:

receive
Pattern1 [when Guard] ->
Expre1;
Pattern1 [when Guard] ->
Expre1;

end.

例子:

-module(process).
-export([loop/0]).
loop() ->
receive
{rectangle,Width,Ht} ->
io:format("Area of rectangle is ~p~n",[Width*Ht]),
loop();
{circle,R} ->
io:format("Area of circle is ~p~n",[3.14*R*R]),
loop();
Other ->
io:format("I don't know what the area of a ~p is ~n",[Other]),
loop()
end.

在shell中创建一个进程:

Pid = spawn(fun process:loop/0).
//Pid = spawn(fun() -> loop() end).
//Pid = spawn(process,loop,[]).
Pid ! {rectangle,5,4}. //发送消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值