美文网首页
线程池参数设计根据

线程池参数设计根据

作者: 任嘉平生愿 | 来源:发表于2019-11-15 15:32 被阅读0次

线程池参数设计根据

keepAliveTime
allowCoreThreadTimeout
设置为true,则所有线程均会退出直到线程数量为0。

工作队列

ArrayBlockingQueue
LinkedBlockingQueue
SynchronousQueue
PriorityBlockingQueue

常用LinkedBlockingQueue和SynchronousQueue

参数的设置跟系统的负载有直接的关系,下面为系统负载的相关参数:

  •   tasks 每秒需要处理的最大任务数量   (一秒钟订单数1000)
    
  •   tasktime 处理第个任务所需要的时间  (处理一个订单数所需0.1s)
    
  •   responsetime 系统允许任务最大的响应时间 (处理订单时间不能超过2秒)
    

corePoolSize设置:
每个任务需要tasktime秒处理,则每个线程每钞可处理1/tasktime个任务。系统每秒有tasks个任务需要处理,则需要的线程数为:tasks/(1/tasktime),即taskstasktime个线程数。假设系统每秒任务数为100~1000,每个任务耗时0.1秒,则需要1000.1至1000*0.1,即10~100个线程。那么corePoolSize应该设置为大于10,具体数字最好根据8020原则,即80%情况下系统每秒任务数,若系统80%的情况下第秒任务数小于200,最多时为1000,则corePoolSize可设置为20。

queueCapacity设置:
任务队列的长度要根据核心线程数,以及系统对任务响应时间的要求有关。队列长度可以设置为(corePoolSize/tasktime)responsetime: (20/0.1)2=400,即队列长度可设置为400。

注意
LinkedBlockingQueue queue = new LinkedBlockingQueue();
这实际上是将队列长度设置为Integer.MAX_VALUE,将会导致线程数量永远为corePoolSize,再也不会增加,当任务数量陡增时,任务响应时间也将随之陡增。

maxPoolSize设置:
当系统负载达到最大值时,核心线程数已无法按时处理完所有任务,这时就需要增加线程。每秒200个任务需要20个线程,那么当每秒达到1000个任务时,则需要(1000-queueCapacity)*(20/200),即60个线程,可将maxPoolSize设置为60。

其他因素
考虑CPU的情况。若结合CPU的情况,比如,当线程数量达到50时,CPU达到100%,则将maxPoolSize设置为60也不合适,此时若系统负载长时间维持在每秒1000个任务,则超出线程池处理能力,应设法降低每个任务的处理

相关文章

  • 线程池参数设计根据

    线程池参数设计根据 keepAliveTimeallowCoreThreadTimeout设置为true,则所有线...

  • 线程池

    1. 设计线程池遵循的规则 我们应该设计通用的线程池,那么该怎么设计呢,其实就是通过回调函数,将线程函数和参数都用...

  • 线程池相关

    1.线程池参数设计 1.1意义 线程池的线程数量设置过多会导致线程竞争激烈; 如果线程数量设置过少的话,还会导致系...

  • JAVA-线程池

    什么是线程池,为什么要用线程池? 线程池可以理解为:根据参数建立一套框架,并且预先创建一定量的线程,当有异步任务需...

  • Java线程总结 之 ThreadPool 线程池

    线程脑图 ThreadPool 线程池 线程池的构造参数 ----------------------------...

  • 天猫核心技术部(4面题目):spring+JVM调优+分布式+负

    一面 介绍自己,项目 线程创建方式、线程池、哪些参数?饱和策略? 哪些设计模式?Java里面用到了哪些设计模式?了...

  • 天猫核心技术部(4面题目):spring+JVM调优+分布式+负

    一面 介绍自己,项目 线程创建方式、线程池、哪些参数?饱和策略? 哪些设计模式?Java里面用到了哪些设计模式?了...

  • java基础-多线程

    java线程池的实现 ThreadPoolExecutor java线程池几个参数 corePoolSize当线程...

  • 线程池知识个人总结及源码分析

    1 ThreadPoolExecutor 该线程池是比较常用的线程池。参数如下: 参数名解释corePoolSiz...

  • 线程池核心参数

    线程池核心参数 1)corePoolSize(线程池基本大小) 2)maximumPoolSize(线程池最大数量...

网友评论

      本文标题:线程池参数设计根据

      本文链接:https://www.haomeiwen.com/subject/ggntrctx.html