erlang四大behaviour之一gen_server】的更多相关文章

  来源:http://www.cnblogs.com/puputu/articles/1701017.html erlang程序设计里面有个设计原则就是把你的进程构造成树,把共用代码提出来,特定功能用自己的module实现,这也就是behaviour了,应用behaviour可以减少与本身事务无关的代码量,设计逻辑更加清晰.老纪边学习边记录吧. gen_server实现服务器/客户端模型,用于多个客户共用一个资源的这种情况.他由几个接口函数和几个回调函数组成(回调函数必须在你的module里定…
erlang程序设计里面有个设计原则就是把你的进程构造成树,把共用代码提出来,特定功能用自己的module实现,这也就是behaviour了,应用behaviour可以减少与本身事务无关的代码量,设计逻辑更加清晰.老纪边学习边记录吧. gen_server实现服务器/客户端模型,用于多个客户共用一个资源的这种情况.他由几个接口函数和几个回调函数组成(回调函数必须在你的module里定义)这些可以参考erlang的doc 举个例子: -module(ch3). %这是我们的回调模块,也是我们实现业…
http://www.cnblogs.com/puputu/articles/1689621.html 1. 监督规则 一个监督者负责启动.停止.监控他的子进程.监督者的一个基本概念就是当必要的时候重启子进程保证它们的存活 哪个子进程要重启和被监控是由一个子规程列表决定的,子进程按照列表中指定的顺序启动,并按相反的顺序终止 2. 实例 监督者的回调模块 -module(ch_sup).  -behaviour(supervisor).  -export([start_link/0]).  -ex…
来源:http://www.cnblogs.com/puputu/articles/1701012.html 今天介绍erlang的一个非常重要的behaviour,就是gen_fsm-有限状态机,有限状态机的作用非常之多,比如文本解析,模式匹配.游戏逻辑等等方面的处理都是它的强项,所以这个behaviour非常之重要 1. 有限状态机 有限状态机可以用下面这个公式来表达 State(S) x Event(E) -> Actions(A), State(S') 表示的就是在S状态时如果有事件E发…
来源:http://www.cnblogs.com/puputu/articles/1689623.html 1. 事件处理规则 在OTP中,事件管理器是一个事件可以发送到的命名对象,一个事件可以是一个错误.一个警告.或者一些要写入日志的信息 在事件管理器中,有0个.一个或者多个事件处理器被安装,当事件管理器被一个事件通知时,这个事件将被安装在事件管理器中的事件处理器处理, 事件管理器用一个进程实现,事件处理器用回调模块实现.事件管理器本质上维护一个{Module, State}列表,每一个Mo…
这是Erlang generic standard behaviors gen_server 分析的系列的最后一篇,主要分析gen_server module 辅助性的功能函数. 在gen_server 的MAIN loop 流程中,除了处理Parent 的'EXIT' 消息, user module 常规消息之外, 还处理了一类 system 消息. 这一类system 消息的来源是一个sys 的module,在Erlang OTP体系中,sys module 主要有两大类的作用,一个是热更,…
在分析完gen module (http://www.cnblogs.com/--00/p/4271386.html)之后,就可以开始进入gen_server 的主体module 了.gen_server 的主体 module 暂不涵括terminate, hibernate, debug trace 相关的内容,这些会单独拉出来分析. gen_server 主要包括start 初始化部分, MAIN loop. 其中MAIN loop 为gen_server的主体结构, 其中,处理Label…
hibernate 主要用于在内存空闲时,通过整理进程的stack,回收进程的heap 来达到回收内存节省资源的效果. hibernate 可用于OTP 进程以及普通进程, hibernate 的官方文档 erlang:hibernate/3 Puts the calling process into a wait state where its memory allocation has been reduced as much as possible, which is useful if…
在Erlang 系统中,经常需要gen_server 进程来处理共享性的数据,也就是总希望一个gen_server 进程来为多个普通进程提供某种通用性的服务,这也是gen_server 设计的初衷.但是,由于公平调度的原因,在Erlang体系中,每个process 能获得的资源都是同等的:同等的CPU时间片(还有默认情况下同等的初始化内存). 也就是gen_server 进程只能获得1/(N+1)的CPU时间片,为N个进程提供通用性的服务,而无法违背公平调度的原则使gen_server 进程获得…
gen_server 主体 module 已经分析完了(http://www.cnblogs.com/--00/p/4271982.html),接着,分析下gen_server 中的terminate .首先分析一个问题, 这个问题是之前在weibo 上和别人讨论过的一个问题: Why will a rpc:call started gen_server process terminate with normal reason? 注:被call 的gen_server 进程 trap_exit…
唔,听说过这四个牛逼渣渣的behaviour:gen_server,gen_fsm,gen_event,supervisor.所以也就更加好奇behaviour的实现. 在解释它是怎么工作的之前,我们可以先看一个具体的实现.这可能会帮助我们理解. 我们先定义一个behaviour:   -module(my_behaviour). -export([behaviour_info/1]). -export([start/1, stop/0]). behaviour_info(callbacks)…
http://erlang.org/doc/design_principles/des_princ.html 图和代码皆源自以上链接中Erlang官方文档,翻译时的版本为20.1. 这个设计原则,其实是说用户在设计系统的时候应遵循的标准和规范.阅读前我一直以为写的是作者在设计 Erlang/OTP 框架时的一些原则. 闲话少叙.Let's go! 1.概述 OTP设计原则规定了如何使用进程.模块和目录来组织 Erlang 代码. 1.1 监控树 Erlang/OTP的一个基本概念就是监控树.它是…
-module(first_gen_server).-behaviour(gen_server).-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). %% ====================================================================%% API functions%% ===================…
原始链接:https://blog.zhustec.me/posts/erlang-otp-1-callback-based-on-behaviour OTP 是什么 OTP 的全称是开源电信平台 (Open Telecom Platform),但是它的实际作用却不像它的名字一样只是用做电信平台,它是 Erlang 中的一套用于方便用户编写高容错性系统的框架.如果说 Erlang 的伟大之处一半来自于它的并发和分布式,那么另一半就来自于 OTP 框架. 为什么需要 OTP 在编写 Erlang…
http://www.hoterran.info/otp-gen_server-sourcecode 在阅读erlang的otp源码gen_server.erl的时候,一直想写点什么,用一种最好的方式表达出来,最终却总是没法表达清楚,困惑之余看到这篇文章,作者用图解的方式,非常清晰明了的表达了我一直想表达的东西,下面是原文链接: http://www.hoterran.info/otp-gen_server-sourcecode 感谢原创作者热心的分享. 阅读OTP源码可以帮助你写出更好.更健壮…
http://blog.sina.com.cn/s/blog_3fe961ae0101k4p6.html 行为模式其实非常类似于面向对象语言中的接口,至少笔者是这么理解的.OTP行为模式将一些反复出现的模式分成了两个部分,通用部分和具体应用相关的实现部分,这一过程其实就类似于面向对象编程中的抽象出接口的过程.本文给出一个OTP中最常见的行为模式的示例:通用服务器,即gen_server. 编写gen_server回调模块大致包括3相步骤: (1) 确定回调模块的名称: (2) 写接口函数(由客户…
gen_server 概要: 通用服务器行为描述: 行为模块实现服务器的客户端-服务器关系.一个通用的服务器进程使用这个模块将实现一组标准的接口功能,包括跟踪和错误报告功能.它也符合OTP进程监控树.了解更多信息参考OTP设计原则. gen_server假定所有特定部分位于一个回调模块,它导出的一组预定义的功能.行为函数和回调函数的关系可以说明如下: gen_server module Callback module ----------------- --------------- gen_s…
一.从start方法产出的独立gen_server进程 实验代码: %%%-------------------------------------- %%% @Module  : %%% @Author  : %%% @Email   : %%% @Created : %%% @Description: %%%-------------------------------------- -module(ter_a). -behaviour(gen_server). %% gen_server…
方法1: %%gen_server:部分call_back function. -define(TIME,1000). init([]) –> erlang:send_after(?TIME,self(),loop_interval_event), {ok, #state{}}. handle_info(loop_interval_event, State) –> NewState = do_loop_interval_event(State), erlang:send_after(?TIME…
本文主要记录各种情况下gen_server进程退出的表现. 研究动机起源于Elixir/Phoenix框架中遇到的一个进程异常退出问题.因为网络异常,客户端超过一段时间未发来消息,channel进程(一个gen_server)退出了,但是挂的很突兀,不调用 terminate,进而导致掉线处理没被调用,表现出一堆bug.分析发现它是被shutdown的,而一个gen_server如果没有trap_exit,被shutdown就不会调用terminate. Anyway,实验了各种组合,仅以此做个…
官方资料参考: Module:terminate(Reason, State) Types: Reason = normal | shutdown | {shutdown,term()} | term() State = term() This function is called by a gen_server when it is about to terminate. It should be the opposite of Module:init/1 and do any necessa…
behaviour是啥,看了资料做了demo以后,感觉像接口,话不多说,祭代码 R15开始,回调模型使用callback来约定,更加好理解了 test_behavior.erl -module(test_behavior). -callback ok_func()-> {OK::atom()}. -callback no_reply_func(Reason::atom())-> {noreply}. test_impl.erl -module(test_impl). -behaviour(te…
rebar是一个遵循 Erlang/OTP 原则的 Erlang 项目构建工具,使用它可以减少构建标准 Erlang/OTP 项目架构配置的工作量,并且可以很容易的编译.测试.发布 Erlang 应用程序.更强大的是,rebar 提供一种依赖管理机制,它可以使开发者很方便地通过 Git.Hg 等方式重用常见的第三方 Erlang 模块或库. 安装rebar 你可以在 https://github.com/rebar/rebar里下载zip包或者源代码自己编译. 在根目录下有一个文件bootstr…
没有关于erlang interface ,继续寻找吧... --------------------------------------------------------------- erl -noshell -pa erlpath  -s hello(hello.beam) start(in hello.erl) 这个脚本需要使用绝对路径指向包含 hello.beam erlang shell #ls.sh#!/bin/bashls > sunexit 0 %%echo.erl-modu…
笔记系列 Erlang环境和顺序编程 Erlang并发编程 Erlang分布式编程 Yaws Erlang/OTP 日期              变更说明2014-10-12 A outline, 1, 32014-10-19 A 2.1, 2.22014-10-26 M 2.1, 2.2  A 2.3 2014-10-27 A 2.4 类型系统 前言 拖了很久很久了,终于快忘的差不多了. Agenda 0 范围 环境 Erlang运行时环境.Emacs开发环境 顺序编程 数据结构 语法和语义…
这篇文章还不是最终版,有时间时,我会再来补充完善. 什么是link Erlang程序基于进程建模,进程之间的交互机制有收发消息,link和monitor.其中,收发消息通常用于正常的进程间通讯,而link和monitor多用于异常情况处理,本文从应用的角度介绍和分析link机制.link是双向全联通的,用来将两个或多个进程绑定在一起,绑定在一起之后,VM会保证在有进程退出时,对与其绑定在一起的进程执行特定的操作. 创建link和取消link Two processes can be linked…
Link and Monitor differences 原文地址 Introduction link/1 and monitor/2 are 2 different ways of notifying (or know) that a process died. Thing is, these are really very different in nature and these differences are not widely understood by beginners. So…
在分析 gen_server (或者是gen_fsm )之前,首先应该弄明白,gen 这个module . -module(gen). -compile({inline,[get_node/1]}). %%%----------------------------------------------------------------- %%% This module implements the really generic stuff of the generic %%% standard…
1.简介 Gen_server实现了通用服务器client_server原理,几个不同的客户端去分享服务端管理的资源(如图),gen_server提供标准的接口函数和包含追踪功能以及错误报告来实现通用的服务器,同时可以作为OTP监控树的一部分. Gen_server函数与回调函数之间的关系: gen_server moduleCallbackmodule -------------------------------- gen_server:start_link ----->Module:ini…
a simple erlang process pool analysis 这是一个简单的erlang进程池分析,是learn you some erlang for Great Good 里面的一个example,具体的内容可到官网查看! 基本的流程图 实现原理 这个的样例的实现原理官网都有比較具体的说明,主要模块在ppool_serv中,ppool_serv是一个gen_server behaviour, 而ppool_sup 是一个one_for_all的策略,假设ppool_serv或者…