zoukankan      html  css  js  c++  java
  • 线程池的使用场景有哪些

    线程池的各种使用场景

    https://blog.csdn.net/qq_17045385/article/details/79820847

    https://www.jianshu.com/p/71b5e40f94e0

    1. 线程池的使用场景有哪些
      线程池适合单系统的大量的异步任务处理,比如发送短信、保存日志。

    2. 说说创建线程池的重要参数

      • corePoolSize:线程池的大小。线程池创建之后不会立即去创建线程,而是等待线程的到来。当前执行的线程数大于该值时,线程会加入到缓冲队列。
      • maximumPoolSize:线程池中创建的最大线程数。
      • keepAliveTime:空闲的线程多久时间后被销毁。默认情况下,该值在线程数大于corePoolSize时,对超出corePoolSize值的这些线程起作用。
      • unit:TimeUnit枚举类型的值,代表keepAliveTime时间单位。
      • handler:线程拒绝策略。
    3. 这些参数怎么设置,线程池调优怎么做

      • 基本思想:

        1. 高并发、任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换。
        2. 并发不高、任务执行时间长的业务要区分开:
          1. IO密集型的任务,因为IO操作并不占用CPU,可以加大线程池中的线程数目,让CPU处理更多的业务
          2. CPU密集型任务,线程池中的线程数设置得少一些,减少线程上下文的切换。
        3. 并发高、业务执行时间长,在于整体架构的设计,能否使用中间件对任务进行拆分和解耦。
      • 具体设置:

        1. corePoolSize = 每秒需要多少个线程处理
          threadcount = tasks/(1/taskcost) =taskstaskcout =  (500~1000)0.1 = 50~100 个线程。corePoolSize设置应该大于50。根据8020原则,如果80%的每秒任务数小于800,那么corePoolSize设置为80即可。
        2. queueCapacity = (coreSizePool/taskcost) * responsetime
          计算可得 queueCapacity = 80/0.1*1 = 80,意思是队列里的线程可以等待1s,超过了的需要新开线程来执行。切记不能设置为Integer.MAX_VALUE,这样队列会很大,线程数只会保持在corePoolSize大小,当任务陡增时,不能新开线程来执行,响应时间会随之陡增。
        3. maxPoolSize = (max(tasks)- queueCapacity)/(1/taskcost)(最大任务数-队列容量)/每个线程每秒处理能力 = 最大线程数。计算可得 maxPoolSize = (1000-80)/10 = 92。
        4. rejectedExecutionHandler:根据具体情况来决定,任务不重要可丢弃,任务重要则要利用一些缓冲机制来处理。
        5. keepAliveTime和allowCoreThreadTimeout:采用默认能满足。
  • 相关阅读:
    【Angular】笔记(2):从前端基本知识认识Angular
    【Angular】笔记(1):使用.NET Framework类比认识Angular
    【C#】笔记(2):哈希表
    【WinForm】杂记(6):C#之DataTable类(总结)
    【C#】笔记(1):科学计算
    【WinForm】杂记(5):C#导入Excel到DataTable
    【WinForm】杂记(4):C#编写和调用exe程序(带参数)
    从mixin到new和prototype:Javascript原型机制详解
    亲身体验函数的柯里化
    简单理解jsonp原理
  • 原文地址:https://www.cnblogs.com/weigy/p/12667425.html
Copyright © 2011-2022 走看看