hoterran.info
运维和开发 » Blog Archive » ERLANG OTP源码分析 – gen_server
http://www.hoterran.info/otp-gen_server-sourcecode
ERLANG OTP源码分析 – gen server. By hoterran on 2012/05/13, 21:55. 阅读OTP源码可以帮助你写出更好、更健壮的erlang程序.下面一系列文章就gen server、gen fsm、supervisor的 源码. 进行分析, 从erlang级别解释其工作原理, 所有的完整流程图 在这里. 为什么从gen server它开始, 因为gen fsm和它很类似, 而supervsisor本身是一个gen server. 图示为一个叫Mod的模块, 它是一个gen server程序, 绿色方格为调用进程 客户进程 , 黄色方格为spawn出的gen进程 服务进程 . 不同的泳道表示函数所隶属的模块, 通过这个图可以清晰的看出各个模块至之间的相互调用, 图是使用 gliffy. 从左上角的start(Args)开始,gen server的程序Mod的开始函数都会调用gen server:start(或者start link)来创建一个服务进程,gen server:start内部实际上调用的是gen模块。 在spec里看到handle call的返回值可以...
hoterran.info
运维和开发 » eventlibrary
http://www.hoterran.info/tag/eventlibrary
Posts Tagged ‘eventlibrary’. Redis源代码分析 – event library. Posted on 2011/06/22, 21:51, by hoterran, under redis. 事件库仅仅包括ae.c、ae.h,还有3个不同的多路复用 本文仅描述epoll 的wrapper文件,事件库封装了框架调用的主循环函数,暴露了时间、文件事件注册和销毁函数,典型的依赖反转模式。 Redis启动的时候 init server() 会创建的一个全局使用的事件循环结构 typedef struct aeEventLoop { int maxfd; / 仅仅是select 使用 long long timeEventNextId; aeFileEvent events[AE SETSIZE]; / 用于保存epoll需要关注的文件事件的fd、触发条件、注册函数。 AeFiredEvent fired[AE SETSIZE]; / epoll wait之后获得可读或者可写的fd数组,通过aeFiredEvent- fd再定位到events。
hoterran.info
运维和开发 » Blog Archive » ERLANG OTP源码分析 – code_server
http://www.hoterran.info/erlang-otp-code_server-sourcecode
ERLANG OTP源码分析 – code server. By hoterran on 2012/08/08, 16:41. 继续上一次的 sys 模块升级的话题,我们再讨论一下升级基本原理,了解一下 code 和 code server 模块。 上文也说到过,如果升级不改动 State 里的内容,你可以在不 suspend gen 进程的情况下快速升级。 拷贝 beam 到线上的 ebin 目录。 让代码触发 Fully qualified function calls,走到新的 beam 代码。 如果你想省略后 2,3 两步,可以利用 mochiweb 的 reloader 模块进行自动加载,其原理也是发现 beam 文件时间戳的变化调用 2,3 两步。 结合 code server 代码来研究一下升级的原理。 升级调度的命令一般在 code 模块,它其实是 code server 模块的接口,上面的 purge、load file 实际上都是向 code server 进程发送相应的话 call 消息,erlang 一般都这么玩。 升级后 vsn=2 这就是当前代码,老代码为 vsn=1。
hoterran.info
运维和开发 » mysql
http://www.hoterran.info/tag/mysql
Posts Tagged ‘mysql’. Posted on 2012/06/21, 16:41, by hoterran, under explore mysql sourcecode. MySQL协议分析,主要参考MySQL Forge上的wiki和源码.协议的全图见这里, 给同事分享的ppt见这里,下载见这里. Read the rest of this entry ». Posted on 2011/07/25, 11:47, by hoterran, under 未分类. 编译安装 cmake . make sudo make install 源码分析 根据流程图解释一下mydumper的工作步骤。 解析参数 使用glib的g option context parse,比libc里的getopt long简单多了。 通过show processlist来判断是否有长查询,如果有长查询则退出dump,可以通过–long-query-guard加长时间,或者使用–kill-long-queries杀掉长查询。 Read the rest of this entry ». 江南白衣 发表在 red...
hoterran.info
运维和开发 » Blog Archive » lua metatable使用和源码分析(三)
http://www.hoterran.info/lua-metatable-sourcecode-and-use-3
By hoterran on 2012/02/05, 23:46. 在lua里只能为表设置元表,而在c程序里面可以为基本类型进行元表操作,但上篇博文提到了普通类型的很多操作是不会走到元表,下面的例子针对数字类型,添加多种事件,只有部分事件会生效.下面的例子在c代码里对数字类型添加元表对 add, len都设置事件. 再来看meta c test.lua脚本. Hoterran@ /Projects/lua$ cat meta c test.lua print(#1) print(1 2) print(getmetatable(1) print(getmetatable(" ) hoterran@ /Projects/lua$ ./mct 100 3 table: 0x87e7950 nil. 这个lua程序在普通的lua解释器下是回报错的,因为数字类型并未有计算长度的函数.当给数字类型设置元表后, len成功的执行了,而 add并未调用元表事件函数,这符合我们在 上一篇博文. 查找元表之后,如果还存在 metatable事件,返回该事件对应的信息并把已经获取到的元表弹出栈. Lua getmetatab...
hoterran.info
运维和开发 » otp
http://www.hoterran.info/tag/otp
Posts Tagged ‘otp’. ERLANG OTP源码分析 – code server. Posted on 2012/08/08, 16:41, by hoterran, under erlang. 继续上一次的 sys 模块升级的话题,我们再讨论一下升级基本原理,了解一下 code 和 code server 模块。 Read the rest of this entry ». Posted on 2012/07/31, 20:52, by hoterran, under erlang. Sys 模块主要有两大用途 统计跟踪目标 gen 进程、代码热升级,尤其后者非常重要,下面从 erlang 源码层面来讲述这两大工作原理。 Read the rest of this entry ». ERLANG OTP源码分析 – supervisor. Posted on 2012/05/15, 14:48, by hoterran, under erlang. Read the rest of this entry ». ERLANG OTP源码分析 – gen fsm.
hoterran.info
运维和开发 » Blog Archive » ERLANG OTP源码分析 – gen_fsm
http://www.hoterran.info/otp-gen_fsm-sourcecode
ERLANG OTP源码分析 – gen fsm. By hoterran on 2012/05/14, 22:10. Gen fsm和gen server非常的类似, 在gen进程递归调用loop函数的过程中,除有StateData还额外有一个StateName的atom, 它决定了下次执行的函数. 另外一个不同之处是, gen server程序是由调用进程向gen进程发送消息, 一种cs模式的调用关系,而gen fsm程序中这个发送消息的通常都是gen进程本身. 初始化过程和gen server很类似, 区别是init返回必须获得一个当前状态StateName, 这样才能继续接下来的事件处理. 如果在Mod:init返回的是{ok, State, Timeout}. Ok, State, Timeout} - proc lib:init ack(Starter, {ok, self()}), loop(Parent, Name, State, Mod, Timeout, Debug);. 即便超时时间内gen进程未收到任何消息, 依然会触发StateName函数的执行, 其中Event为timeout.
hoterran.info
运维和开发 » erlang
http://www.hoterran.info/tag/erlang
Posts Tagged ‘erlang’. ERLANG OTP源码分析 – code server. Posted on 2012/08/08, 16:41, by hoterran, under erlang. 继续上一次的 sys 模块升级的话题,我们再讨论一下升级基本原理,了解一下 code 和 code server 模块。 Read the rest of this entry ». Posted on 2012/07/31, 20:52, by hoterran, under erlang. Sys 模块主要有两大用途 统计跟踪目标 gen 进程、代码热升级,尤其后者非常重要,下面从 erlang 源码层面来讲述这两大工作原理。 Read the rest of this entry ». ERLANG OTP源码分析 – supervisor. Posted on 2012/05/15, 14:48, by hoterran, under erlang. Read the rest of this entry ». ERLANG OTP源码分析 – gen fsm.
hoterran.info
运维和开发 » lua
http://www.hoterran.info/tag/lua
Posts Tagged ‘lua’. Posted on 2012/02/05, 23:46, by hoterran, under lua. 基本类型如何使用元表 在lua里只能为表设置元表,而在c程序里面可以为基本类型进行元表操作,但上篇博文提到了普通类型的很多操作是不会走到元表,下面的例子针对数字类型,添加多种事件,只有部分事件会生效.下面的例子在c代码里对数字类型添加元表对 add, len都设置事件. Read the rest of this entry ». Posted on 2012/02/05, 23:09, by hoterran, under lua. 表是如何调度到元表的呢,上篇博文的例子我们看到当键值未能被查找到之后会调用 index事件对应的函数.现在举一个 add 事件来遍历重要环节的源码.当然从luaV execute开始. Read the rest of this entry ». Posted on 2012/02/04, 17:22, by hoterran, under lua. Read the rest of this entry ».
hoterran.info
运维和开发 » sourcecode
http://www.hoterran.info/tag/sourcecode
Posts Tagged ‘sourcecode’. Posted on 2012/07/31, 20:52, by hoterran, under erlang. Sys 模块主要有两大用途 统计跟踪目标 gen 进程、代码热升级,尤其后者非常重要,下面从 erlang 源码层面来讲述这两大工作原理。 Read the rest of this entry ». Posted on 2012/06/21, 16:41, by hoterran, under explore mysql sourcecode. MySQL协议分析,主要参考MySQL Forge上的wiki和源码.协议的全图见这里, 给同事分享的ppt见这里,下载见这里. Read the rest of this entry ». ERLANG OTP源码分析 – supervisor. Posted on 2012/05/15, 14:48, by hoterran, under erlang. Read the rest of this entry ». ERLANG OTP源码分析 – gen fsm. Lua metatable...