当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

java 高性能运算--量化线程池的大小

发表于: 2014-10-15   作者:annan211   来源:转载   浏览次数:
摘要:    线程池合理的长度取决于将要提交的任务类型和所部署系统的特征。      为了正确的定制线程池的长度,你需要理解你的计算环境、资源预算和任务的自身特性。部署系统中安装了多少个CPU?多少内存?任务主要执行的是计算、I/O还是一些混合操作?它们是否需要像JDBC Connection这样的稀缺资源?如果你有不同类别的任务,它们拥有差别

   线程池合理的长度取决于将要提交的任务类型和所部署系统的特征。
     为了正确的定制线程池的长度,你需要理解你的计算环境、资源预算和任务的自身特性。部署系统中安装了多少个CPU?多少内存?任务主要执行的是计算、I/O还是一些混合操作?它们是否需要像JDBC Connection这样的稀缺资源?如果你有不同类别的任务,它们拥有差别很大的行为,那么应该考虑使用多个不同的线程池,这样每个线程池可以根据不同任务的工作负载进行调节。
      对于计算密集型的任务,一个有Ncpu 个处理器的系统通常通过使用一个Ncpu +1个线程的线程池来获得最优的利用率(计算密集型的线程恰好在某时因为发生一个页错误或者因为其他原因而暂停,刚好有一个“额外”的线程,可以确保在这样的情况下CPU周期不会中断工作)。对于包含了I/O和其他阻塞操作的任务,不是所有的线程都会在所有的时间被调度,因此你需要一个更大的池。为了正确地设置线程池的长度,你必须估算出任务花在等待的时间与用来计算的时间的比率;这个估算值不必十分精确,而且可以通过一些监控工具获得。你还可以选择另一种方法来调节线程池的大小,在一个基准负载下,使用不同大小的线程池运行你的应用程序,并观察CPU利用率的水平。

  线程池大小 对于系统运行效率来说至关重要,我们可以给出一个估算线程池大小的经验公式。


   Ncpu = CPU的数量
   Ucpu = 目标CPU的使用率(0<=Ucpu<=1)
   W/C = 等待时间与计算时间的比率

   为保持处理器达到期望的使用率,最优的线程池的大小等于
   
    NThreads = Ncpu * Ucpu *(1+W/C)

   可以通过 Runtime.getRuntime().availableProcessors(); 获取CPU的数量。
 

java 高性能运算--量化线程池的大小

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行
1. 引言 合理利用线程池能够带来好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建
1. 引言 合理利用线程池能够带来好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建
1. 引言 合理利用线程池能够带来好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建
1. 引言 合理利用线程池能够带来好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建
Java 线程池学习 Reference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程
首页 资讯 精华 论坛 问答 博客 群组 更多 ▼ 欢迎endual 3 收件箱(3) 我的应用 我的博客 设置 退出
Reference: 《创建Java线程池 》[1],《Java线程:新特征-线程池 》[2], 《Java线程池学习 》[3],
Reference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程池学习》[3],《
帅气的ThreadPoolExecutor http://blog.csdn.net/cutesource/article/details/6061229 http://wenku
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号