erlang杂记三 ---- 进程
来源:互联网 发布:淘宝产品摄影布光技巧 编辑:程序博客网 时间:2024/05/21 17:03
1.特性:在erlang里,进程属于语言特性而非操作系统。
创建和销毁进程非常迅速;在两个进程之间收发消息非常迅捷;进程在所有操作系统上行为相同,可以创建大量进程;进程之间不共享任何数据,彼此完全独立;进程间交互的唯一方法是通过消息传递的。
2.并发原语:Pid=spawn(Fun)创建一个进程,用于对Fun求职。新进程与调用者并发运行。
Pid ! Message 向Pid发送Message,P1!P2!P3...!M将M发送到P1,P2...
receive ... end 接收一个发给当前进程的消息。收到消息时会与pattern逐个进行匹配,匹配不到则继续等待吓一跳消息。
after 在receive中作为等待超时信息。
3.注册进程:
如果想要给一个进程发送消息,那么就需要知道他的pid,这种方法很麻烦,这意味着系统做所有发送消息的进程都知道这个pid,也就是说,如果你不公开这个pid,那么就无法与该进程进行通信。解决办法就是register该pid到一个名字。
4.如何编写一个并发程序:
-module(ctemplate).-compile(export_all).start()->spawn(fun()->loop([]) end).rpc(Pid,Request)-> Pid!{self(),Response}, Response end.loop(X)-> receive Any-> do_sth, loop() end.
5.使用MFA启动进程:
spawn(Mod,FuncName, Args)该方式可用于动态升级代码。。
6.体验通信:
1 -module(ping_pong). 2 -export([start/1,ping/3,pong/0]). 3 4 start(N) -> 5 PongId2=spawn(ping_pong, pong,[]), 6 PongId=spawn(ping_pong, pong,[]), 7 spawn(ping_pong, ping,[N,PongId,PongId2]). 8 9 ping(0,PongId,PongId2) -> 10 PongId ! {self(), finish}, 11 PongId2 ! {self(), finish}, 12 io:format("ping finished~n",[]); 13 ping(N,PongId,PongId2) -> 14 PongId ! {self(), run}, 15 PongId2 ! {self(), run}, 16 receive 17 {PongId,run} -> 18 io:format("ping receive from pong1~n",[]); 19 {PongId2,run} -> 20 io:format("ping receive from pong2~n",[]) 21 end, 22 ping(N-1, PongId,PongId2). 23 24 pong() -> 25 receive 26 {_,finish} -> 27 io:format("pong finished~n",[]); 28 {PingId, run} -> 29 io:format("pong receive from ping~n", []), 30 PingId ! {self(), run}, 31 pong() 32 end.使用方法:
c(ping_pong).ping_pong:start(5).发送消息的时候,将自身的id值发送到对方,则对方知道回复消息回复到谁。运用模式匹配可以很好的识别消息。
- erlang杂记三 ---- 进程
- erlang杂记三 --- 服务器抽象
- Erlang 杂记
- Erlang杂记
- ERLANG 杂记
- erlang 杂记
- [Erlang 0009] Erlang 杂记
- [Erlang 0009] Erlang 杂记
- [Erlang] Erlang 杂记 VI
- [Erlang 0011] Erlang 杂记Ⅱ
- [Erlang 0045] Erlang 杂记 Ⅲ
- [Erlang 0074] Erlang 杂记 IV
- [Erlang 0077] Erlang 杂记 V
- [Erlang 0094] Erlang 杂记 VI
- erlang学习笔记三---进程管理
- erlang杂记二 --- 函数
- erlang杂记四---otp
- Erlang 知识杂记
- Oracle树查询及相关函数
- log4j配置祥解
- MySQL 常用命令之一
- 通用树状节点 获取所有叶节点和支节点 sql
- sqlserver2008数据库配置优化
- erlang杂记三 ---- 进程
- 关于[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]找不到指定文件的解决办法
- (一)vs2010 新建、使用dll
- C# 生成验证码时 Random 随机数相同
- 三星s5pv210核心板全球最低价199元,尽在保定芯灵思
- 走进序列化(基础篇)
- 队列的线性存储结构
- jquery indexOf方法
- AutoCompleteTextView文本提示框