erlang进程之间没有共享内存,每一个进程都有它自己的内存,想要修改其他进程的内存,你只能向它发送一条消息。
erlang的进程不共享内存,没有锁的概念。
erlang的错误侦测机制:进程之间可以相互链接。如果一个进程消亡,那么跟这个进程有链接的进程会得到一条消息,被告诉进程已经消亡,及其原因。
erlang进程的三个原语:spawn,send,receive.
Pid = spawn(Fun):创建一个新的并发进程。对于Fun求值,返回一个Pid,可以使用Pid向进程发送消息。
Pid!Message:想标识符为Pid的进程发送消息,消息发送是异步的。!是发送消息符。它的返回值是它发送消息的本身。
receive...end:接收一个发送给当前进程的消息。
语法:
例子:
在shell中创建一个进程:
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}. //发送消息