Erlang-并发
来源:互联网 发布:剑三正太捏脸数据图片 编辑:程序博客网 时间:2024/05/17 02:00
创建新进程:spawn
语法:spawn(Module, Exported_Function, List ofArguments).
举例:spawn(tut14, say_something, [hello, 3]),
发消息:Pid ! Message
举例:Ping_PID ! pong表示向Ping_PID进程发送元组pong (!操作符用于发消息)
self():self() returns the pid of the process which executes self()
接收消息:receive ....end
语法:
receive
pattern1 ->
actions1;
pattern2 ->
actions2;
....
patternN
actionsN
end.
接收超时:after
语法:after time
举例:after 5000(见tut19)
pong() ->
receive
{ping, Ping_PID} ->
io:format("Pong received ping~n", []),
Ping_PID ! pong,
pong()
after 5000 ->
io:format("Pong timed out~n", [])
end.
下面两个特殊的超时time:
1)infinity(无穷大),infinity是一个atom,指定了超时设置将永远不会被执行。
2) 0,超时如果设定为0意味着超时设置将立刻执行,但是系统将首先尝试当前“邮箱”里的消息。
-module(tut14).
-export([start/0, say_something/2]).
say_something(What, 0) ->
done;
say_something(What, Times) ->
io:format("~p~n", [What]),
say_something(What, Times - 1).
start() ->
spawn(tut14, say_something, [hello, 3]),
spawn(tut14, say_something, [goodbye, 3]).
-module(tut15).
-export([start/0, ping/2, pong/0]).
ping(0, Pong_PID) ->
Pong_PID ! finished,
io:format("ping finished~n", []);
ping(N, Pong_PID) ->
Pong_PID ! {ping, self()},
receive
pong ->
io:format("Ping received pong~n", [])
end,
ping(N - 1, Pong_PID).
pong() ->
receive
finished ->
io:format("Pong finished~n", []);
{ping, Ping_PID} ->
io:format("Pong received ping~n", []),
Ping_PID ! pong,
pong()
end.
start() ->
Pong_PID = spawn(tut15, pong, []),
spawn(tut15, ping, [3, Pong_PID]).
-module(tut19).
-export([start_ping/1, start_pong/0, ping/2, pong/0]).
ping(0, Pong_Node) ->
io:format("ping finished~n", []);
ping(N, Pong_Node) ->
{pong, Pong_Node} ! {ping, self()},
receive
pong ->
io:format("Ping received pong~n", [])
end,
ping(N - 1, Pong_Node).
pong() ->
receive
{ping, Ping_PID} ->
io:format("Pong received ping~n", []),
Ping_PID ! pong,
pong()
after 5000 ->
io:format("Pong timed out~n", [])
end.
start_pong() ->
register(pong, spawn(tut19, pong, [])).
start_ping(Pong_Node) ->
spawn(tut19, ping, [3, Pong_Node]).
- Erlang-并发
- Erlang—并发编程
- ErLang与并发
- Erlang并发程序模版
- Erlang并发编程(一)
- erlang并发编程模板
- Erlang并发编程1
- Erlang并发编程2
- erlang 并发编程
- Erlang并发编程
- Erlang并发编程
- Erlang Concurrent 并发进阶
- Erlang并发编程-目录
- Erlang并发编程-第一章
- Erlang并发编程(三) --- 调试
- Erlang并发编程(四) --- mochiweb
- Erlang并发编程(五) --- bigwig
- Erlang/OTP并发编程实战
- CentOS6.2 KVM 虚拟机命令行安装配置
- HttpAnalyzer居然会使交通银行网银无法输入帐号
- Uva Oj 11300 - Spreading the Wealth
- MyEclipse搭建Struts程序
- 控制反转(IOC)与依赖注入(DI)
- Erlang-并发
- 315,这是一场神奇的晚会
- 4_4
- asp.net C# NPOI 读取 Excel 文件
- 基于网络爬虫的XSS漏洞检测技术
- php curl
- java 自学日志【四】---数组
- 为什么广东人不看央视
- data mining & blog (foreign)