Cuesport理解

Cuesport理解

cuesport是一个简单的进程池,多用于数据库连接
调用方式

cuesport:start_link(?POOL_NAME, PoolSize, ChildMods, ChildMFA).

1.?POOL_NAME为进程池名称
2.PoolSize为进程池阈值
3.ChildMods为回调模块名称
4.ChildMFA为需添加到进程池的M:F:A
函数说明
cuesport项目函数入口:cuesport:start_link/4

start_link(PoolName, PoolSize, ChildMods, ChildMFA) ->
 start_link(PoolName, PoolSize, 2*PoolSize, ChildMods, ChildMFA).
start_link(PoolName, PoolSize, MaxRestarts, ChildMods, ChildMFA) ->
     Args = [PoolName, PoolSize, MaxRestarts, ChildMods, ChildMFA],
     SupName = list_to_atom("cuesport_" ++ atom_to_list(PoolName) ++ "_sup"),
     supervisor:start_link({local, SupName}, ?MODULE, Args).

supervisor:start_link/3新建督程并调用init/1函数

init([PoolName, PoolSize, MaxRestarts, ChildMods, ChildMFA]) ->
    %新建表名为PoolName的ets表存放进程信息
    PoolTable = ets:new(PoolName, [named_table, public]),
    ets:insert(PoolTable, {pool_size, PoolSize}),
    %{seq,N}标识进程池调用位置
    ets:insert(PoolTable, {seq, 0}),
 MFA = fun(Id) ->
            {?MODULE, start_worker, [Id, PoolTable, ChildMFA]}
    end,
    Children = [{N, MFA(N), transient, 2000, worker, ChildMods}
        || N <- lists:seq(1, PoolSize)],
  {ok, {{one_for_one, MaxRestarts, PoolSize}, Children}}.
  %以上启动规格
  %重启策略:异常终止重启,且各进程不相互影响
  %进程终止超时值:2000ms
  %重启频率:PoolSize秒内重启次数超过MaxRestarts终止所有进程,然后终止督程
%需加入进程池进程MFA,Id取值为1-PoolSize
start_worker(Id, PoolTable, {M, F, A}) ->
    {ok, Pid} = apply(M, F, A),
    ets:insert(PoolTable, {Id, Pid}),
    {ok, Pid}.

使用实例直接调用官方实例:

-module(myproduct_redis).
-export([start_link/0, q/1, q/2]).
-define(POOL_NAME, myproduct_redis_pool).

start_link() ->
    PoolSize = get_config(redis_pool_size),
    EredisOpts = get_config(redis_worker_config),
    ChildMods = [eredis, eredis_client, eredis_parser],
    ChildMFA = {eredis, start_link, EredisOpts},
    cuesport:start_link(?POOL_NAME, PoolSize, ChildMods, ChildMFA).

q(Query) ->
    eredis:q(cuesport:get_worker(?POOL_NAME), Query).

q(Query, Opts) ->
    eredis:q(cuesport:get_worker(?POOL_NAME), Query, Opts).

然后调用supervisor:start_child(Sup, ChildSpec)函数将myproduct_redis加入进程树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值