gen_server瓶颈

如果只维护了一个gen_server进程来处理大多数请求将造成。进程忙不过来,消息队列不大断增大,需要消耗更多的堆内存。最后会导致VIM崩溃。

方法1: 此方法有个缺点 spawn 创建+销毁成本非常高.

我采用gen_server作为第三方服务放入到系统中,为了解决瓶颈问题
我在handle_call里面采用noreply,且只创建一个进程Pid,然后给此进程Pid发消息,剩下的业务逻辑交给Pid进进程处理.计算完进程自动销毁(receive没有循环)
31 handle_call({testnoreply}, From, Tab) ->

32 Pid = spawn(?MODULE, test_reply,[]),
33 Pid ! {From,test},
34 {noreply, Tab};
业务逻辑放在test_reply处理
22 test_reply()->
23 receive
24 {From, X} ->
25 io:format(“X===~p,=From=~p==~n”,[X,From]),
26 gen_server:reply(From,test)
27 end.

方法2:创建更多的gen_server PID处理 提高消费队列,如果个进程状态共享的话有点繁琐。

方法3:用一个单独的node来处理,同方法2类似

方法4:采用redis消息队列--所以对于大量的消息处理的系统,首先要考虑的就是架构一个消息队列集群

在此谢谢 yufeng\ licuangang\zhaoweiguo

相关资料

http://blog.yufeng.info/archives/1438

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值