美文网首页多线程专家
IO密集型的线程池大小设置

IO密集型的线程池大小设置

作者: go4it | 来源:发表于2017-07-18 10:50 被阅读1068次

类型判断(CPU密集orIO密集or混合型)

看应用是CPU密集型的还是IO密集型的,还是混合型的。

  • CPU密集
    CPU密集型的话,一般配置CPU处理器个数+/-1个线程,所谓CPU密集型就是指系统大部分时间是在做程序正常的计算任务,例如数字运算、赋值、分配内存、内存拷贝、循环、查找、排序等,这些处理都需要CPU来完成。

  • IO密集
    IO密集型的话,是指系统大部分时间在跟I/O交互,而这个时间线程不会占用CPU来处理,即在这个时间范围内,可以由其他线程来使用CPU,因而可以多配置一些线程。

  • 混合型
    混合型的话,是指两者都占有一定的时间。

IO密集型线程大小

/**
 * Support class for thread pool size
 * 
 * @author Nadeem Mohammad
 *
 */
public final class ThreadPoolUtil {
    
    private ThreadPoolUtil() {
        
    }
    /**
     * Each tasks blocks 90% of the time, and works only 10% of its
     *  lifetime. That is, I/O intensive pool
     * @return io intesive Thread pool size
     */
    public static int ioIntesivePoolSize() {
        
        double blockingCoefficient = 0.9;
        return poolSize(blockingCoefficient);
    }

    /**
     * 
     * Number of threads = Number of Available Cores / (1 - Blocking
     * Coefficient) where the blocking coefficient is between 0 and 1.
     * 
     * A computation-intensive task has a blocking coefficient of 0, whereas an
     * IO-intensive task has a value close to 1,
     * so we don't have to worry about the value reaching 1.
     *  @param blockingCoefficient the coefficient
     *  @return Thread pool size
     */
    public static int poolSize(double blockingCoefficient) {
        int numberOfCores = Runtime.getRuntime().availableProcessors();
        int poolSize = (int) (numberOfCores / (1 - blockingCoefficient));
        return poolSize;
    }
}

使用

ExecutorService executorService = Executors.newFixedThreadPool(ThreadPoolUtil.ioIntesivePoolSize());

这样语义化设置,表达能力强一些。

doc

相关文章

  • Java设置线程池数量

    如果是CPU密集型应用,则线程池大小设置为N+1 如果是IO密集型应用,则线程池大小设置为2N+1 最佳线程数目 ...

  • 合理的估算Java线程池大小的方法

    网上有给出简单的线程池大小估算方法 如果是CPU密集型应用,则线程池大小设置为N+1如果是IO密集型应用,则线程池...

  • IO密集型的线程池大小设置

    类型判断(CPU密集orIO密集or混合型) 看应用是CPU密集型的还是IO密集型的,还是混合型的。 CPU密集C...

  • 设置合理的线程池大小

    任务一般可分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池。 CPU密集型任务尽...

  • 线程池大小分配

    任务一般分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池1. CPU密集型CPU...

  • 线程池中线程数量如何设定

    一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数) 如果是CPU密集型应用,则线程池大小设...

  • 面试总结 优化

    1.Flutter的setState2.dart的多线程dart的多线程3.java线程池io密集型和Cpu密集型...

  • 面经

    线程池线程数如何抉择IO密集型2 * CPU核数CPU密集型CPU核数 + 1混合型若可拆分则拆分,若相差不大则取...

  • 如何设置线程池大小

    如何设置线程池大小 线程池的线程数量设置过多会导致线程竞争激烈,如果线程数量设置过少的话,还会导致系统无法充分利用...

  • 26-设置线程池的大小

    设置线程池的大小 线程池的理想大小取决于将要提交的任务类型和所部署系统的特性。 为了正确的定制线程池的大小,你需要...

网友评论

    本文标题:IO密集型的线程池大小设置

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