Eralng 编程中的OTP

OTP里面创建进程时 常用有四大behaviour

• supervisor

• gen_server

• gen_fsm

• gen_event

在erlang的编译器中,behaviour的作用使用来定义一个规约。定义好这个规约,任何遵守这个规约的模块,必须按照规约中的要求,使用-export([])。导出对应的函数,导出后的这些函数将由behaviour统一支配。

behaviour只不过是实现代码组织的一种手段,behaviour就是把代码分成通用部分,以及每一个回调模块需要去做的特殊部分。

erlang程序设计里面有个设计原则就是把你的进程构造成树,把共用代码提出来,特定功能用自己的module实现,这也就是behaviour了,应用behaviour可以减少与本身事务无关的代码量,设计逻辑更加清晰。

所以,使用-behaviour()定义的模块都是这个behaviour所要求实现的回调模块。

自定义Erlang的经典应用:rabbitmq 他对erlang自带的gen_server进行了改进,写了gen_server2。因为gen_server中的消息队列是一个普通的消息队列不能满足需求,改进后的gen_server2使用了带有优先级的消息队列。

使用behaviour

应用erlang的behaviour 框架(gen_server,gen_fsm,gen_event,supervisor)在处理很多情况的时候省下大量不必要的代码,使用的时候在框架基础添加自定义逻辑就可以搭建项目了,可以说是精髓。

gen_server:

提供的是client和server之间,请求和回调的处理。

用于多个客户共用一个资源的这种情况。它由几个接口函数和几个回调函数组成(回调函数必须定义在你的module里定义),这些可以参考erlang的doc。

gen_fsm:

提供的是even状态转换和action触发处理

gen_event:

提供的是event manager 对event的处理。自定义event manager收到event,进行自定义处理

gen_event和gen_fsm的区别:

gen_fsm带有外部状态(自定义状态)转换,一个状态由于某事件发生,导致状态发生变化,触发action的同时进入下一个状态,可以是个循环。 (类似水与冰的装换,遇冷变冰,遇热化水)

gen_event对事件进行处理,可以理解为单向的。event给过来,event manager处理掉。

supervisor:提过的事对子进程的启动,停止,监控操作。可以说是一个异常处理框架,但又类似切面,可以干涉到项目的每个进程(启动或停止任意子进程)。如果子进程需要重启,supervisor会根据重启策略和最大重启频率这些参数确定如何重启子进程。

参考引用:

erlang四大behaviour简述_思月行云的博客-CSDN博客

[Erlang 学习笔记]erlang behaviour小总结_lqg1122的博客-CSDN博客

Erlang关键字之behaviour_犀牛_2046的博客-CSDN博客_behaviour erlang



Eralng程序设计(第二版)

最新文章

  1. C++类的内存分配
  2. 实现了与maya场交互的能力
  3. PHP 依赖注入,从此不再考虑加载顺序
  4. shell学习之路:重定向符号的使用
  5. POJ 1700 坐船过河问题
  6. Spring jdbcTemplate + EasyUI 物理分页
  7. Sipdroid实现SIP(一): 注册
  8. Java并发编程面试题 Top 50 整理版
  9. 剑指offer——栈的压入、弹出序列
  10. day25 Python __setattr__
  11. WIN10配置MongoDB
  12. 2018-2019-2 网络对抗技术 20165230 Exp5 MSF基础应用
  13. madlib 集成 hasura graphql-engine 试用
  14. 使用原子类或synchronized(没用Lock)解决阐述多线程所遇到线程安全问题和解决方案
  15. JMeter测试工具.jmx文件详解
  16. POJ-1458 Common Subsequence(线性动规,最长公共子序列问题)
  17. AngularJS之过滤器
  18. Linux 文件系统 -- 简述几种文件类型
  19. P3155 [CQOI2009]叶子的染色
  20. 改善C#程序的建议5:引用类型赋值为null与加速垃圾回收

热门文章

  1. 早期SpA患者髋关节的受累发生率
  2. .net 中的几种事务
  3. Docker中使用Nginx镜像配置HTTPS和HTTP强制使用HTTPS访问(4)
  4. GitLab服务器修改用户密码
  5. netstate查找端口占用
  6. 自动删除几天前的备份集文件脚本 for windows
  7. phpstorm 本地代码更新与服务器同步
  8. 使用NibiruSDK 坑
  9. pychars的使用
  10. 浅谈 web3