探索高性能线程池
1NQ高效线程池
关于1NQueue框架的使用和设计思考:
1NQueue设计的目的,是为了轻而快的帮助应用实现异步处理,同时降低请求并行度及提高应用吞吐量。最终实现,通过很小的改动及非常轻的体量,帮助应用在性能方面实现比较大的提升。
框架的应用和设计思想也很简单,在 保证线程池灵活伸缩 的基础上,通过一定的改造, 使整个框架具备一个很高的执行效率,充分挖掘并行计算的处理能力 。
特点:
①前置收集:收集提交任务的时候可以在异步提交的基础上再自定义一个Queue,整个流程是任务先提交到Queue我们再启动一个守护线程去不断拉取并往线程池提交,这样以来相当于在水池入口处安装了一个三角漏斗,使水的流速在快的情况下减缓注入,有点时间换空间思想,但也不全是。
②后置处理:线程池任务到达一定阈值会触发拒绝策略,1NQ自定义拒绝策略,启用线程Deque模式,将所有任务Drawto到Deque中。
所以,倘若我们固定了大小,带来的后果就是要么处理能力闲置导致资源浪费,要么就是处理能力不够导致应用性能下降。
如果使用无界的线程池就等于放弃了线程池的伸缩性,这样,线程池就变成了一个固定大小的线程池。这样的话,线程数量的设置就成了一个比较棘手的问题,过大,会造成资源的浪费,过小,会出现性能不足的情况。
所以,我们可以自定义线程池来针对具体业务模型提高并发处理能力,也像netty那样,在JDK基础上自定义了一堆高性能的组件,从而更高效的挖掘CPU处理能力。