原来写过一个....我都忘记了..
http://fair-jm.iteye.com/blog/1894288
以上这个不对啊..看了下和所谓的生产者消费者差的远了..什么玩意儿(╯‵□′)╯︵┴─┴
..
%% @author cc fairjm %% @doc @todo Add description to Producer_Consumer. -module(producer_consumer). %% ==================================================================== %% API functions %% ==================================================================== -export([start/0,consume/0, produce/0,rec/1]). -define(SERVER,?MODULE). -define(NUM,100). %% ==================================================================== %% Internal functions %% ==================================================================== start() -> Pid=spawn(?MODULE,rec,[0]), case whereis(?MODULE) of undefined -> register(?SERVER,Pid); _Other -> unregister(?SERVER),register(?SERVER,Pid) end, Pid . rec(0) -> receive {put,Pid} -> Pid ! {put_success,1},rec(1) end ; rec(?NUM) -> receive {get,Pid} -> Pid ! {get_success,?NUM-1},rec(?NUM-1) end ; rec(N) -> receive {get,Pid} -> Pid ! {get_success,N-1},rec(N-1); {put,Pid} -> Pid ! {put_success,N+1},rec(N+1) end . %%同步消费 consume()-> SPid=self(), ?SERVER ! {get,SPid}, receive {get_success,Num} -> io:format("get successed count:~p~n", [Num]); _Other -> io:format("get failed~n") end, ok . %%同步生产 produce()-> SPid=self(), ?SERVER ! {put,SPid}, receive {put_success,Num} -> io:format("put successed count:~p~n", [Num]); _Other -> io:format("put failed~n") end, ok .
以上这个...还有点像样..
使用同步的生产和消费 小于等于0时 消费者堵塞 大于等于100时 生产者堵塞
erlang中的receive机制挺好的 如果你发送的消息不符合当前在堵塞的receive 就不会被取出 依旧在"信箱"里 等到有匹配的receive堵塞之后再重新被拿出
运行:
相关推荐
本文将通过"erlang 入门练习"的案例,探讨Erlang的基础知识和应用。 首先,让我们从`client.erl`这个文件名入手。在Erlang中,`.erl`文件是源代码文件,包含了Erlang的模块定义和函数实现。`client`可能表示一个...
标题 "一种傻纸牌游戏的Erlang实现" 暗示了我们将探讨一个使用Erlang编程语言构建的简单纸牌游戏。Erlang是一种并发性极强、功能丰富的函数式编程语言,常用于构建分布式系统和高可用性的应用程序。 在描述中提到的...
Erlang emulator 实现分析Erlang emulator 实现分析
结合给定的标题“erlang websocket 练习”和描述,我们可以推断这是一个关于使用Erlang实现WebSocket服务的实践项目。 首先,让我们详细了解一下Erlang中的WebSocket实现。在Erlang中,通常会使用 Cowboy 或 YAWS ...
标签中提到了“Erlang Rabbit 异步通讯”,这意味着讨论的重点是Erlang如何与RabbitMQ结合实现异步通信。RabbitMQ是一个开源的消息代理,它遵循Advanced Message Queuing Protocol (AMQP)标准,提供了一种可靠、高效...
我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...
"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...
此外,提供的"erlang的timer和实现机制.pdf"和"更多erlang资料下载.txt"也是进一步学习和研究的好资源。 总之,Erlang的timer模块是其强大并发能力的一个体现,通过熟练掌握这一部分,开发者可以构建出更加高效和...
"erlang简单聊天练习"是一个使用Erlang语言实现的轻量级聊天应用示例,它展示了Erlang在并发通信、分布式系统和容错性方面的优势。通过学习和实践这个项目,开发者可以更好地理解和掌握Erlang的基础知识,以及如何...
通过分析和学习这些代码,我们可以深入理解如何将Ranch与Erlang结合,构建一个高效的游戏TCP服务器。开发者可以在此基础上进一步扩展功能,例如加入SSL加密、实现更复杂的游戏逻辑或者优化性能。
4. **Supervisor**:在Erlang OTP(开放电信平台)中,Supervisors是行为模式之一,用于实现容错和重启策略。`bank1_sup`模块应包含一个`supervisor`行为的实现,负责启动和监控子进程。 5. **模块和功能**:在`src...
erlang实现的网游服务器(OpenPoker系统)erlang实现的网游服务器(OpenPoker系统)erlang实现的网游服务器(OpenPoker系统)
在给定的文件内容中,通过Erlang语言实现了KMP算法,以下是从文件内容中提取的关键知识点: 1. kmp_search/2函数:这是KMP算法的主函数,用于检查子串(SubString)是否存在于主串(String)中。该函数调用了kmp_...
3. **Message Queuing**:通过消息队列(如RabbitMQ)进行异步通信,C#和Erlang都可以作为生产者或消费者。 4. **Protobuf或JSON序列化**:定义共同的数据结构,通过protobuf或JSON格式在两者间交换数据。 5. **...
Redis 的 Erlang 实现Erlang版本的Redis,目标是实现类似的算法性能,但支持多个主节点和大于 RAM 的数据集。有关更多信息,请参阅 2012 年 Erlang Factory 演讲的 PDF。联系我们如果您对使用本图书馆 有任何疑问或...
1. **并发模型**:Erlang的并发基于轻量级进程(Lightweight Processes, LSPs),这些进程间的通信通过消息传递实现,这与传统的线程模型不同,具有更好的隔离性和容错性。 2. ** OTP(Open Telecom Platform)**:...
Erlang是一种面向并发的、函数式编程语言,特别适合于构建高可用性和容错性的分布式系统。...这个练习帮助初学者理解Erlang OTP的设计原则和实际应用,是深入学习Erlang并发编程和系统架构的重要步骤。
在实际应用中,开发者可以利用RabbitMQ实现微服务间的异步通信,通过创建生产者和消费者来发送和接收消息。Erlang的强大力量在于其对分布式系统和并发处理的支持,这使得RabbitMQ成为许多大型分布式系统中不可或缺的...