-behaviour()的使用,他具体有什么作用
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程序设计(第二版)
-behaviour()的使用,他具体有什么作用的更多相关文章
- Erlang基础知识集锦
http://wenku.baidu.com/link?url=or-8mkUYUM0uVeqCYESGe93YIlh2IDLP7lFOwRlwr8Syf3PeHbwJC5DPCErs4NFrb1p4 ...
- erlang四大behaviour之二-gen_fsm
来源:http://www.cnblogs.com/puputu/articles/1701012.html 今天介绍erlang的一个非常重要的behaviour,就是gen_fsm-有限状态机,有 ...
- springmvc中的页面解析器ViewResolver不起作用,变量输出字符串的解决方案
<web-app xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"> <servlet> <servlet ...
- spring cloud ----> RibbonClient设置的熔断器Hystrix不起作用
Ribbon spring.io 官网的简介: Ribbon is a client side load balancer which gives you a lot of control over ...
- Erlang/OTP:基于Behaviour的回调函数
原始链接:https://blog.zhustec.me/posts/erlang-otp-1-callback-based-on-behaviour OTP 是什么 OTP 的全称是开源电信平台 ( ...
- if __name__== "__main__" 的意思(作用)python代码复用
if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog http://www.dabu.info/if-__-name__ ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- github中的watch、star、fork的作用
[转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...
- web.xml中welcome-file-list的作用
今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...
- web.xml中load-on-startup的作用
如下一段配置,熟悉DWR的再熟悉不过了:<servlet> <servlet-name>dwr-invoker</servlet-name> <ser ...
随机推荐
- LG P4717 【模板】快速莫比乌斯/沃尔什变换 (FMT/FWT)
\[C_k = \sum_{i|j=k}A_i B_j \] 这样的或卷积可以做一次 \(\text{FWT}\),把数组变为 \(\widehat{A}_i = \sum_{j\subseteq i ...
- LG P3653 小清新数学题
\(\text{Poblem}\) 求 \(\sum_{i=l}^r \mu(i)\) \(1 \le l,r \le 10^{18}, r - l \le 10^5\) \(\text{Analys ...
- HDMI转USB视频采集卡(ACASIS 1080P高清视频采集卡)--九五小庞
ACASIS阿卡西斯是深圳市菲德越科技有限公司旗下数码科技品牌.菲德越是2008年成立的一家专注于采集卡.硬盘盒.集线器等专业3C配件产品,集研发.设计.生产.销售于一体的高新科技公司,我们公司以向客 ...
- SQL语句中 left join 后用 on 还是 where,区别大了!
前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条. 后来发现 join on and 不会过滤结果记录条数,只会根据and后的 ...
- echar 多个图形显示时,点击显示隐藏然后样式缺失,变得非常小
原因:Echarts 图表是根据你定义的div 的样式来确定图表的大小,当图表隐藏时,Echarts会找不到div的宽和高,再次显示时它会给自己一个非常小的默认宽高值,所以在隐藏显示后会发现它变得非常 ...
- css background背景透明
background: transparent; background: rgba(0, 0, 0, 0.8);
- chm文档生成->Sandcastle使用帮助
1.介绍 Sandcastle是微软提供的开源的,用于生成.net文档帮助的工具. 源代码路径:https://github.com/EWSoftware/SHFB,进去后能找到Relase版本的路径 ...
- .NET控制台程序秒变asp.net core站点
有个.NET控制台程序用来跑定时任务的,但是做好后需求发生变化,跑出的数据结果不能直接使用,数据需要转成json格式通过web接口来调用实现.这个控制台是个单体程序,没有封装,如果新建一个项目的话还得 ...
- flannel 关闭SNAT
flannel 关闭SNAT 默认情况下,flannel 访问集群外网络是通过 SNAT 成宿主机 ip 方式,在一些金融客户环境中为了能实现防火墙规则,需要直接针对 POD ip 进行进行规则配置, ...
- Java实现台球游戏的动画实现相关代码
package com.bjsxt;//scr中新建的包packageimport java.awt.*;import javax.swing.*;public class BallGame exte ...