Cuesport理解
来源:互联网 发布:怎样在淘宝买微博小号 编辑:程序博客网 时间:2024/06/11 17:50
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-PoolSizestart_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加入进程树
0 0
- Cuesport理解
- 理解
- 理解
- 理解
- 理解
- 理解
- 理解
- 理解
- 理解
- 理解
- 理解
- 理解
- CopyOnWriteArrayList理解与理解
- rowid 简单理解理解
- 理解XML
- JMS 理解
- 理解 SOAP
- 理解UDDI
- 搞定支付接口(一) 支付宝即时到账支付接口详细流程和代码
- 第八届蓝桥杯 java B组 分巧克力
- 一键加群
- php mysql_fetch_row, mysql_fetch_array, mysql_fetch_assoc 的区别
- MFC下DLL/lib的调用
- Cuesport理解
- 了解sockt网络通信
- Java数据结构(三)——集合总结及集合的线程安全
- 底部导航BottomNavigationView+ViewPager+Fragment
- python——OrderedDict 、importlib
- ant+jmeter快速搭建
- 存储过程实例3:批量提交
- leetcode 500. Keyboard Row(easy)
- 文件输入输出方式设置值