erlang并发编程和进程通信
创始人
2024-05-31 20:17:39
0

文章目录

    • 进程
    • 消息传递

进程

erlang的并发编程简单易用而且轻量,只需通过spawn函数调用另一个函数即可,可谓开箱即用。其参数为

spawn(Module, Fucntion, Args) -> pid()

其中Module为模型名;Function为函数名;ArgsFunction的参数。返回值pid()表示进程号。下面写一个脚本

-module(spawnTest).
-export([start/0, say/2]).say(What, 0) ->done;
say(What, Times) ->io:format("~p~n", [What]),say(What, Times - 1).start() ->spawn(spawnTest, say, [hello, 3]),spawn(spawnTest, say, [goodbye, 3]).

编译并执行,结果如下,可见hellogoodbye之间的输出是交替的

1> c("spawnTest").
{ok,spawnTest}
2> spawnTest:start().
hello
goodbye
hello
goodbye
<0.88.0>
hello
goodbye
hello
goodbye

其中<0.88.0>是进程标识符,这个标识符是start函数返回的。所以这个程序看上去只有两个进程,交替打印出sayhello,但实际上,start()也是一个进程,其返回值是最后一行语句,即spawn..goodbye..的返回值。所以从上面的结果来看,两个spawnTest函数执行到一半的时候,start()迎来了生命周期的尾声。

消息传递

一般在编程语言中,线程和进程是两个不同的概念,前者是最小执行单元,可以粗暴地理解为一个函数。一个程序中可以有多个线程,这些线程共用一片内存,只是执行时并不按照调用的顺序,而是并发工作。进程则不然,每个进程都是一个独立运行的程序,拥有自己独有的内存区域,除非用特殊的手段让二者共享,否则彼此不通往来。

而在erlang中,spawn开启的是进程,彼此之间需要通过特殊的手段才能通信,这个特殊手段就是!,erlang进程通信的基本语法为

Pid ! Message

其中Pid为进程的标识符,Message为发送的信息内容。这行代码的整体含义,就是向标识符为Pid的进程发送Message

有发送自然要有接收,erlang接收信息需要一个程序块,基本格式为

receivePattern1 -> ...Pattern2 -> ......
end

其中receive即接收函数,Pattern为被匹配的模式,简单理解就是发送者发送的内容。与普通函数在参数传入后的模式匹配雷同。

下面就实战体验一下

-module(comTest).
-export([start/0, pidA/2, pidB/0]).pidA(0, PID) ->PID ! finished,io:format("A: finished~n", []);pidA(N, PID) ->% self() 返回自身的进程号PID ! {pidA, self()},receive pidB -> io:format("A: received B~n", [])end,pidA(N - 1, PID).pidB() ->receivefinished -> io:format("B: A finished~n", []);{pidA, PID} ->io:format("B: received A~n", []),PID ! pidB,pidB()end.start() ->B_PID = spawn(comTest, pidB, []),spawn(comTest, pidA, [3, B_PID]).

效果如下

1> c(comTest).
{ok,comTest}
2> comTest:start().
B: received A
<0.88.0>
A: received B
B: received A
3> A: received B
3> B: received A
3> A: received B
3> A: finished
3> B: A finished```

相关内容

热门资讯

31个产品获“天府名品”品牌授... “魅力天府品牌之夜”活动举行,拉开中国品牌日四川活动序幕  发布《四川品牌发展报告2025》(以下简...
新一波“台球热”催生千亿赛道 “好一点的台位要提前三天预订”台球馆内人气火爆。受访者供图  斯诺克世锦赛冠军的奖杯,终于被中国选手...
署名文章:从宏观调控看中国经济... 转自:新华社客户端新华社北京5月11日电 题:从宏观调控看中国经济基本面清华大学中国发展规划研究院常...
成都这家企业用“氢”与“翼”开... 产品远销35国 今年销售额有望破亿元大关市民骑氢动力两轮车出行。杨浩  一架满载货物的物流无人机从位...
罗东川会见中国中车集团董事长孙... 本报讯(记者 田得乾)5月11日,省委副书记、省长罗东川在西宁会见中国中车集团有限公司董事长孙永才一...
大庆消防员演示班组灭火作业,全... 5月9日,在黑龙江省大庆市,国家消防救援局大庆航空救援支队的消防员向人们演示班组灭火作业。5月12日...
印巴同意停火 联合国表示欢迎 5月10日,在巴基斯坦东部旁遮普省木尔坦市,人们在巴基斯坦和印度宣布停火后庆祝。新华社发  印度和巴...
四川在建规模最大单体光伏项目开...   5月9日,四川省在建规模最大的单体光伏项目——华电新能中咱120万千瓦光伏发电项目正式开工建设,...
来成都工作 有哪些重点人才政策... 转自:成都日报锦观来成都工作 有哪些重点人才政策福利? 日前,一年一度的“蓉漂人才日”到来。活...
皮洛遗址保护利用项目正式开工 总投资约2.4亿元 四川稻城打造史前文明新地标皮洛遗址保护利用项目效果图。图据稻城融媒  华西都市报...
西宁市新就业形态用工争议多元化... 本报讯(西海新闻记者 范程程)5月8日,记者从西宁市总工会获悉,由市总工会联合西宁市人力资源和社会保...
报名通道已开启 转自:成都日报锦观四川国际非遗品牌IP授权交易活动即将启幕报名通道已开启 本报讯 (成都日报锦...
人类为何要驯养鱼类?“三文鱼神... 转自:北京日报客户端《制造三文鱼: 海洋生态危机与经济不平等》 西蒙·塞特尔 谢蒂尔·厄斯特利 著 ...
首发经济提质消费 在“首”更在... 转自:成都日报锦观首发经济提质消费 在“首”更在“新” 聚焦首发经济,成都提出,力争...
戚继光《练兵实纪》里的箭 转自:成都日报锦观戚继光《练兵实纪》里的箭 《练兵实纪》上的传统兵器弓箭。 彭雄/文图...
鲜花、康养产品销量增长明显 转自:成都日报锦观母亲节成都消费市场升温鲜花、康养产品销量增长明显 本报讯 (成都日报锦观新闻...
《风景与画境》:于文字间,感知... 转自:北京日报客户端《风景与画境》伍立杨 著 四川人民出版社“智者乐水,仁者乐山。”这句话蕴含着中国...
《源氏物语》:见证文化“东渡” 转自:北京日报客户端《源氏物语》 吉林文史出版社 2017年版姚桂芬翻译的《源氏物语》读过一遍就束之...
第十一届马识途文学奖颁出 转自:成都日报锦观第十一届马识途文学奖颁出 本报讯 (成都日报锦观新闻记者 泽登旺姆)9日,第...
AIC“扩机构”稳步推进 科创... 近日,金融资产投资公司(简称AIC)再添新军,第六张牌照花落兴业银行(601166.SH)。当前,A...