生产中erlang的并发处理大多都是依靠四大行为来完成,这个以后再说!
我们有的时候可能会误解一个问题就是一个接收消息是如何处理的,直观的去看,是A发一条消息给B,B处理以后返回一个消息,一开始我也这么想,但是这就又带来了另一个问题,那现在如果又有其他人也给B发消息怎么办,那我们就需要一个地方去存储些同时发来的消息,以供A来处理。
回想一下上回我们说的邮局问题
我们来扩展一下,人们将信件发送给邮局,邮局又将无数的信件发送给了每个人,但是收到信件的人无法处理如此多的信件,怎么办呢,那就用一个邮箱来代替,收信人打开邮箱去挑选(想想你拿着一沓信件是怎么看的呢,看过以后的信件放在最后然后看下一个,一次循环),没错,这是队列式的方式(关于进程邮箱很多资料都有详细介绍就不说了)
我们在处理进程的问题时经常会出现并没有得到自己想要的消息,这怎么办?一直占用内存等待下去?
当然不会,简单的 receive处理为我们提供了一个小方法,就是after
把上次的程序扩展一下
rpc(Pid, Request) -> Pid ! {self(), Request}, receive {Pid, Response} -> %%用于确认是否是该进程发送的消息 Response after 2000 -> past end. loop() -> receive {From, {move, Distance}} -> From ! Distance, loop(); {From, {jump, Distance}} -> From ! Distance, loop(); {From, {stop, Time}} -> From ! Time, loop(); {From, Other} -> From ! {error, Other}, loop() after 2000 -> past end.
数字2000是毫秒单位,你可以自己换算一下,根据自己的需要来调整。
注册进程中我遇到了很多的问题,这样的时候一般会看节点信息和打印结果来分析
言归正传
我们来注册一个进程,(这里我还是稍有疑问,看一下测试)
-module(server3). -export([ test1/0, test2/0, test3/0 ]). test1() -> Pid1 = spawn(fun server1:loop/0), register(aaa, Pid1). test2() -> Pid2 = spawn(fun server2:loop/0), register(bbb, Pid2). test3() -> aaa ! 1000.
我调用了test1()和test3(),结果出乎意料,是bad argument。就是说我注册的进程名不对
E:\test>erl Eshell V5.9 (abort with ^G) 1> server3:test1(). true 2> server3:test3(). ** exception error: bad argument in function server3:test3/0 (server3.erl, line 17)为什么?我又修改了一下代码
-module(server3). -export([ test1/0, test2/0 ]). test1() -> Pid1 = spawn(fun server1:loop/0), register(aaa, Pid1), aaa!1000. test2() -> Pid2 = spawn(fun server2:loop/0), register(bbb, Pid2).测试一下
相关推荐
Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。 Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...
在《Erlang并发编程》一书中,详细介绍了Erlang语言的核心并发模型和编程范式,包括但不限于串行编程、进程创建、进程间通信、分布式编程以及错误处理等。书中指出Erlang的并发性能得益于其轻量级进程,这些进程是由...
erlang并发编程实战源代码erlang并发编程实战源代码
《Erlang并发编程》是一本深入探讨Erlang编程语言并发特性的书籍,中文翻译版为《erlang并发编程中文翻译(cpie-cn...书中涵盖了Erlang并发编程的基础概念、高级技巧以及实际案例,是深入理解Erlang并发特性的宝贵资源。
Erlang并发编程是Erlang语言的核心特性之一,它为构建高效、容错的分布式系统提供了强大的工具。Erlang是一种函数式编程语言,特别适合处理并发和实时系统,因其在电信行业的广泛应用而闻名。以下是一些关于Erlang...
erlang并发编程,erlang之父Joe Armstrong得原著之一。
erlang otp学习文档 学习还不错的
**Erlang OTP并发编程实战** 是一本专为开发者深入理解Erlang OTP并发机制而设计的实战指南。OTP(Open Telecom Platform)是Erlang编程语言的核心组件,提供了强大的并发处理能力和分布式系统构建框架。这本书以...
《erlang/otp并发编程实战》侧重生产环境下的erlang 开发,主要讲解如何构建稳定、版本控制良好、可维护的产品级代码,凝聚了三位erlang 大师多年的实战经验。 《erlang/otp并发编程实战》主要分为三大部分:第一...
Erlang是一种专为并发和分布式系统设计的编程语言,它以轻量级进程、消息传递和强大的模式匹配机制而闻名。Erlang脚本在并发编程中的应用广泛,从简单的多进程通信到复杂的分布式系统构建,Erlang都能提供高效的解决...
Erlang OTP并发编程实战是深入理解Erlang并发特性和 OTP(Open Telephony Platform)设计原则的关键资源。这本书的附书源码包含了14个章节的实例代码,旨在帮助读者通过实践掌握Erlang在分布式系统、容错以及高并发...
这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...
书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...
[Manning Publications] Erlang OTP 并发编程实战 (英文版) [Manning Publications] Erlang and OTP in Action (E-Book) ☆ 出版信息:☆ [作者信息] Martin Logan, Eric Merritt, Richard Carlsson [出版机构] ...
### 并发需求下的Scala及Erlang语言的比较与使用 在当今的高并发、大数据处理场景下,选择合适的编程语言对于系统性能至关重要。在众多编程语言中,Scala和Erlang因其强大的并发处理能力和函数式编程特性而受到关注...
书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...
Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心...