Erlang gen_server进程花样作死】的更多相关文章

本文主要记录各种情况下gen_server进程退出的表现. 研究动机起源于Elixir/Phoenix框架中遇到的一个进程异常退出问题.因为网络异常,客户端超过一段时间未发来消息,channel进程(一个gen_server)退出了,但是挂的很突兀,不调用 terminate,进而导致掉线处理没被调用,表现出一堆bug.分析发现它是被shutdown的,而一个gen_server如果没有trap_exit,被shutdown就不会调用terminate. Anyway,实验了各种组合,仅以此做个…
方法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…
参照<programing erlang>书例子,测试erlang创建进程性能 创建N个进程 都wait,然后挨个发送die关闭进程,代码如下: 测试场景:200w进程.MacBook Pro 2013(I5/16G) 测试结果: processes:max(2000000).Maximun allowed processes:16777216Process spawn time Total 8.09(15.262)s,item 4.045(7.631)us 运行进程CPU占用130%,内存峰…
开发工作中,经常会碰到进程池或者线程池,或者其它的资源池.在这里,用erlang实现一个简单的进程池. erlang进程是非常轻量级的,这个进程池的主要目的是用一种通用的方式去管理和限制系统中运行的资源占用.当运行的工作者进程数量达到上限,进程池还可以把任务放到队列中,只要进程资源被释放,排队的任务就能获得运行,否则任务只能阻塞. 这是进程池的监督树: ppool_supersup监督着所有的进程池.一个进程池由ppool_sup.ppool_serv和worker_sup监督的工作者进程池组成…
出自: http://blog.sina.com.cn/s/blog_96b8a1540100zczz.html…
转自: http://blog.sina.com.cn/s/blog_96b8a1540101542m.html 主要组成部分: https://github.com/devinus/poolboy https://github.com/bfrog/hottub https://github.com/aberman/pooly…
  来源:http://www.cnblogs.com/puputu/articles/1701017.html erlang程序设计里面有个设计原则就是把你的进程构造成树,把共用代码提出来,特定功能用自己的module实现,这也就是behaviour了,应用behaviour可以减少与本身事务无关的代码量,设计逻辑更加清晰.老纪边学习边记录吧. gen_server实现服务器/客户端模型,用于多个客户共用一个资源的这种情况.他由几个接口函数和几个回调函数组成(回调函数必须在你的module里定…
gen_server 概要: 通用服务器行为描述: 行为模块实现服务器的客户端-服务器关系.一个通用的服务器进程使用这个模块将实现一组标准的接口功能,包括跟踪和错误报告功能.它也符合OTP进程监控树.了解更多信息参考OTP设计原则. gen_server假定所有特定部分位于一个回调模块,它导出的一组预定义的功能.行为函数和回调函数的关系可以说明如下: gen_server module Callback module ----------------- --------------- gen_s…
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程序设计里面有个设计原则就是把你的进程构造成树,把共用代码提出来,特定功能用自己的module实现,这也就是behaviour了,应用behaviour可以减少与本身事务无关的代码量,设计逻辑更加清晰.老纪边学习边记录吧. gen_server实现服务器/客户端模型,用于多个客户共用一个资源的这种情况.他由几个接口函数和几个回调函数组成(回调函数必须在你的module里定义)这些可以参考erlang的doc 举个例子: -module(ch3). %这是我们的回调模块,也是我们实现业…