范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

通用池化框架commonspool2实践

  最近在学习使用gRPC的知识过程中,突然发现了gRPC并没有提供一个类似于HttpClient连接池管理的功能,所以搜了一下相关资料,然后发现了一个通用的池化框架 commons-pool2 。从Go语言说起
  对于池化技术相信大家都经说过,对于Java来讲:线程池,对于HttpClient:连接池。之前我是一直只是使用,第一次见证到池化技术的威力是在学习Go语言的HTTP接口测试常用的两个库: net/http 和fasthttp 。
  下面是 net/http 创建HTTP请求的方法封装:// Get 获取GET请求 // @Description: // @param uri // @param args // @return *fhttp.Request func Get(uri string, args map[string]interface{}) *http.Request {  if args != nil {   uri = uri + "?" + ToValues(args)  }  request, _ := http.NewRequest("GET", uri, nil)  return request }
  下面是 fasthttp 的创建HTTP请求的方法封装:func DoGet(url string, args map[string]interface{}) ([]byte, error) {  req := fasthttp.AcquireRequest()  defer fasthttp.ReleaseRequest(req) // 用完需要释放资源  req.Header.SetMethod("GET")  values := ToValues(args)  req.SetRequestURI(url + "?" + values)  resp := fasthttp.AcquireResponse()  defer fasthttp.ReleaseResponse(resp) // 用完需要释放资源  if err := FastClient.Do(req, resp); err != nil {   fmt.Println("请求失败:", err.Error())   return nil, err  }  return resp.Body(), nil }
  其中 fasthttp 两行:req := fasthttp.AcquireRequest() defer fasthttp.ReleaseRequest(req)   resp := fasthttp.AcquireResponse() defer fasthttp.ReleaseResponse(resp)
  这就是常用的池化技术使用规范,先获取一个,然后用完之后还回去。
  据资料显示,两者性能差异最大的原因就是 fasthttp 采用了对象池化技术。一下勾起我的好奇心,不过并没有采取行动,还以为是Go语言的奇技淫巧。后来想曾经想过自己实现一个对象池,后来由于技术不够放弃了,原因是性能测试框架已经满足了设计标准,有了阶段性的成果。commons-pool2
  Apache Commons Pool库提供了一整套用于实现对象池化的API,以及若干种各具特色的对象池实现。2.0版本,并非是对1.x的简单升级,而是一个完全重写的对象池的实现,显著的提升了性能和可伸缩性,并且包含可靠的实例跟踪和池监控。
  这个是偶然发现的,没想到真实我孤陋寡闻了。既然挂上了Apache名字,就知道这是一个非常成熟的框架,所以果断学习起来。首先从gRPC的测试代码中剥离。我把使用分成了三部分。 可池化类
  首先我们需要一个可以被池化的对象,也可以是一组对象,这里我只分享前者。我写了一个接口 com.funtester.base.interfaces.IPooled :package com.funtester.base.interfaces  import org.apache.commons.pool2.PooledObject  interface IPooled {      PooledObject reInit()      void destory()  } 池化工厂类
  然后我们需要一个池化工厂类,这个类主要解决如何创建可池化对象,如何将池化对象包装成 org.apache.commons.pool2.PooledObject ,这个是对象池直接存储的对象,还有一个摧毁的com.funtester.funpool.FunPoolFactory#destroyObject 方法。package com.funtester.funpool  import com.funtester.base.interfaces.IPooled import org.apache.commons.pool2.BasePooledObjectFactory import org.apache.commons.pool2.PooledObject  /**  * 可池化工厂类  */ abstract class FunPoolFactory extends BasePooledObjectFactory {      abstract IPooled init()      @Override     IPooled create() throws Exception {         init()     }      @Override     PooledObject wrap(IPooled obj) {         return obj.reInit()     }      @Override     void destroyObject(PooledObject p) throws Exception {         p.getObject().destory()         super.destroyObject(p)     } }  对象池
  这个算是简单的,设置几个常用的配置项,然后创建对象池。 package com.funtester.funpool  import com.funtester.base.interfaces.IPooled import org.apache.commons.pool2.impl.GenericObjectPool import org.apache.commons.pool2.impl.GenericObjectPoolConfig  class FunPool {      private static GenericObjectPool pool = init();      private static FunPoolFactory factory      private static GenericObjectPool init() {         // 连接池的配置         GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();         // 池中的最大连接数         poolConfig.setMaxTotal(8);         // 最少的空闲连接数         poolConfig.setMinIdle(0);         // 最多的空闲连接数         poolConfig.setMaxIdle(8);         // 当连接池资源耗尽时,调用者最大阻塞的时间,超时时抛出异常 单位:毫秒数         poolConfig.setMaxWaitMillis(-1);         // 连接池存放池化对象方式,true放在空闲队列最前面,false放在空闲队列最后         poolConfig.setLifo(true);         // 连接空闲的最小时间,达到此值后空闲连接可能会被移除,默认即为30分钟         poolConfig.setMinEvictableIdleTimeMillis(1000L * 60L * 30L);         // 连接耗尽时是否阻塞,默认为true         poolConfig.setBlockWhenExhausted(true);         // 连接池创建         return new GenericObjectPool<>(factory, poolConfig);     }  }
  然后我们就可以使用这个对象池了,我定义了两个方法来演示两种常见的场景:     /**      * 从连接池获取对象      */     static IPooled get() {         try {             return pool.borrowObject();         } catch (Exception e) {             e.printStackTrace();         }         return factory.create();     }      /**      * 执行器      */     static def execute(Closure closure) {         IPooled client = get();         try {             closure(client);         } finally {             pool.returnObject(client);         }     }
  当然这个演示的Demo是非常不优雅的,而且缺少拓展性,后面我会继续优化。 Have Fun ~ Tester !

Magnepan美屏MiNiMaggie桌上屏风喇叭组合绝对是Magnepan美屏破格之作,桌面上的小小屏风喇叭系统,这小东西针对CAS族群的意欲明显不过。曾几何时,Magnepan予人一份保守的感觉,直至1。7的出现,技术更新之余虽然发烧入门,钢铁组合Aria906AXR100一朋友新婚,各处花销下来已是颇伤元气,问能否在新居小窝享受到发烧音乐,但荷包已不能再承受一次大动干戈了。我想了想,实际上发烧器材也并不一定和贵价画上等号。当然,实力雄厚得用家可以一绘形绘声,颜值担当,FOCALDimension声霸组合长时间以来,声音表现都是电视机的一个硬伤,特别是对于机身纤薄的平板电视来说,想要做到震撼的音效,不仅仅是技术的局限,电视厂商在这方面也无能为力。目前针对客厅或者紧凑型空间所使用的音自由组合,趣味无限FOCALUtopia乌托邦极品影院法国FOCAL,其良好口碑不仅仅在HiEnd两声道用家之中流传,在家庭影院及定制安装领域中,FOCAL同样是惊艳的存在。FOCAL一直致力于研发高端且别具品格的扬声器,在成立至今超DSP15英寸灵活的胖子EarthquakeSoundMiniMeDSPP15超低音低音炮是家庭影院系统中尤为关键的一个声道。特别是时下流行的DolbyAtmosDTSX这些沉浸式音效的变革下,影音爱好者从往日的只能享受电影画面所带来的冲击,发展成能够可以仿佛沉浸高分析力全景声体验FocalSibEvoDolbyAtmos5。1。2喇叭组合评测不论玩音响还是家庭影院,在任何时候总会有新玩家,所以套装组合总会有一定需求。不过,专玩DolbyAtmos的套装喇叭,市场上的选择又的确实不多,Focal推出的SibEvoDolb玫瑰公爵壹号FOCALAriaK2936CambridgeAudioEVO150FOCAL和CambridgeAudio这两个深受影音爱好者热爱和熟知的品牌,在HiEnd两声道和多声道影院两个领域都有众多精品型号产出。法国FOCAL拥有超过30年的辉煌历程,在自然声发布旗舰动圈耳机NS5梦桥,正式预售自然声公司最近发布了第三只耳机动圈旗舰NS5,梦桥。并已正式上市预售。它的主要特点是碳纳米管振膜单元,并由作曲家方岽清调音。梦桥即是方岽清老师交响曲的名字,也是自然声NS5耳机的名旗舰的实力,自然声8单元旗舰动铁入耳耳机NSX介绍双11前夕,成都自然声公司隆重推出其动铁旗舰耳机NSX。这只单边8单元的动铁耳机,在9月时就曾在广州耳机展上让广大的烧友们交口称赞,10月底的成都音响展上也赢得了成都烧友们一致好评多国都在计划推出的央行数字货币是什么?央行数字货币,简称为CBDC,全称是Centralbankdigitalcurrencies。当下数字时代,各国货币当局正在研究CBDC作为一种新的货币形式,它可以大大提高国内和国美国已成为全球最大的BTC采矿中心最新数据显示,美国现已成为全球BTC采矿的中心。据悉,截至8月底,美国哈希率占全球的35。4,为4月时数据的两倍多。其次是哈萨克斯坦和俄罗斯。自中国对加密货币和采矿行业的监管加强后
法国最大运营商力挺华为表示坚持使用华为设备在5G通信领域,华为的实力毋庸置疑,不过因为一些众所周知的原因,华为的5G设备在全球市场上遇到了不小的阻力,许多国家和地区甚至对华为设备下了限制令。不过,也有部分国家的运营商选择拥佳尼特燃气热水器TJ0测评我愿称为颜值最高的家电设备热水器应该是家庭生活中不可或缺的家电了,尤其马上天冷了,如果家里有一台好用的热水器,下了班回到家舒舒服服的洗个澡躺在床上,日子别提多么幸福美满了我们家之前呢一直用的都是老款的太阳能在京高校发布2022年研招新规部分院校提高报考门槛来源北京日报在京高校发布2022年研招新规本报讯(实习生何蕊)在京各高校近日陆续发布2022年硕士研究生招生简章。记者梳理发现,多所高校明确进一步扩大硕士研究生招生规模,部分高校对每经21点丨易纲支持民营经济互联网经济和数字经济健康发展理想汽车从黑市收购EPB芯片,单价超出正常价格800倍每经编辑张喜威1丨中国央行行长易纲支持民营经济互联网经济和数字经济健康发展每经AI快讯,中国央行行长易纲在国际清算银行(BIS)监管大型科技公司国际会议上讲话始终坚持两个毫不动摇,华为天才少年刷屏!自制缝葡萄机械臂,用到鸿蒙系统任正非未来要胜利,必须招到比自己更优秀的人点蓝字关注,不迷路华为天才少年的长假和普通人真的不太一样。自制缝葡萄机械臂回应网络热议既不是天才也不是少年近日,B站UP主稚晖君花一万块自制的机械臂视频火了。这位UP主用国庆长假造没想到老手机华为P10也能用上鸿蒙2。0系统了我有一台华为P10,一直从上一年耐心等着希望早日能更新更新鸿蒙系统支持华为,终于上个看到开放内测,赶紧申请内测,上个月申请了内测,首批内测通过名单没见我的,有点失望。今天真没想到刚鸿蒙2。0系统第八批升级招募开始,一共有6款华为刚刚向mate10,华为P20系列手机推送了鸿蒙2。0系统新版本升级更新,现在华为鸿蒙2。0系统新一批的内测升级更新也开始招募了。华为鸿蒙2。0系统第八批内测升级招募开始了,鸿可不可以取消外卖这个行业?自己厨师可自业,开着门店网来售。自己赚钱带就业,行行状元为国家。时代的产物有市场就是有需求不应该取消最好是取消这个行业!早点取消,食物的安全关系到千家万户,特别是青年一代只涂一时的瑞虎8,捷途,星途,1。6T动力的如何选择?其实不管买什么车都要看自己的预算,不管是瑞虎8还是捷途也或者星途,同等1。6T的动力,价格是不一样的,我也是很喜欢奇瑞的车,要不是准备买房子,我确实打算入手一辆奇瑞的星途Tx,或者小米降噪耳机3Pro开售,空间音频自适应降噪,体验不输AirPods随着无线耳机的不断普及,如今无线耳机已经成为大家的出门必带品。而在无线耳机领域中,苹果的airPods系列一直领先对手,常常被作为行业标杆。但随着国产无线耳机的不断进步,以华为为首特斯拉新工厂或2022年开始选址中国财富网讯日前,在德克萨斯州奥斯汀市举行的特斯拉2021年股东大会上,马斯克表示,未来他的新目标是通过他的SpaceX(太空探索技术公司)于2050年前在火星上建立一座拥有100