`
annan211
  • 浏览: 460960 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

 
阅读更多

   线程池合理的长度取决于将要提交的任务类型和所部署系统的特征。
     为了正确的定制线程池的长度,你需要理解你的计算环境、资源预算和任务的自身特性。部署系统中安装了多少个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如何进行排列组合运算-包含完整代码,适合使用java代码学习排列组合

    排列组合---java如何进行排列组合运算---包含完整代码,适合使用java代码学习排列组合。

    java复数四则运算-类的定义与对象.rar

    1. 编写一个类实现复数的运算。 复数类ComplexNumber的属性: m_dRealPart:实部,代表复数的实数部分。 m_dImaginPart:虚部,代表复数的虚数部分。 复数类ComplexNumber的方法: ComplexNumber():构造函数,...

    高性能运算技术-CUDA

    有关CUDA介绍的简单文档。 适合于编写CUDA论文和做PPT的一些资源

    java源码包---java 源码 大量 实例

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    CVI学习文件-多线程 线程池(修改增加学习版)

    4. **线程池的创建与管理**:了解如何使用特定编程语言(如C++、Java等)提供的线程池API,设置线程池大小,提交任务,以及如何优雅地关闭线程池。 5. **性能优化**:分析多线程和线程池对程序性能的影响,包括CPU...

    java郑java02-数据类型与运算.rar

    java郑java02-数据类型与运算.rar

    java性能的优化-如何提高java运行效率

    - 运算性能:哪种算法执行效率更高。 - 内存分配:程序运行时需要多少内存才能达到最佳效率。 - 启动时间:程序启动所需的时间。 - 可伸缩性:在高用户负载下的程序表现。 - 用户感知:用户如何评估程序性能。 ...

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    Java语言是目前广泛应用的编程语言之一,其丰富的特性和强大的功能深受程序员喜爱。在学习Java的过程中,...运算符-移位运算-逻辑运算.avi`这个视频教程,你将能更深入地理解这些主题,并能够灵活应用到自己的项目中。

    大整数的四则运算----高质量C语言程序.doc

    大整数的四则运算----高质量C语言程序.doc

    《GPU高性能运算之CUDA》-张舒-源代码

    《GPU高性能运算之CUDA》是张舒撰写的一本关于GPU并行计算的专著,主要讲解如何利用CUDA技术实现GPU的高效计算。CUDA是NVIDIA公司推出的一种编程模型,允许开发者使用C、C++或者Fortran等语言直接编程,充分利用GPU...

    JAVA高性能高并发服务器架构pdf文档视频资源

    首先,"JAVA高性能"是指Java平台在处理大量请求和运算时,能够保持高效运行的能力。这主要得益于JVM(Java虚拟机)的优化,包括垃圾回收机制、多线程支持和Just-In-Time(JIT)编译器等。JIT编译器能够在运行时将...

    lolyd-max.zip_Lloyd_Lloyd-Max量化_LloydMax_lolyd 矢量化_matlab quanti

    在IT领域,量化是一种重要的数据处理技术,特别是在信号处理、图像处理和数字通信中。Lloyd-Max量化是其中一种高效的量化算法,它基于最大均方误差(MSE)最小化的原则来设计量化器,从而在有限的表示精度下尽可能...

    JAVA数学库commons-math3

    Java数学库Apache Commons Math 3.5是Java开发者在处理各种数学和统计计算时的一个强大工具。这个库提供了大量的类和方法,支持广泛的数学运算,包括线性代数、随机数生成、概率统计、最优化问题、特殊函数等。下面...

    java 线程池

    ### Java线程池详解 #### 一、线程与线程池的概念 在Java中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程(例如某个Java应用)至少有一个线程,如果线程...

    java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算

    java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java ...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-067-Java基本语法-数据类型转换-大小容量数据混合运算.avi 北京动力节点-Java编程零基础教程-068-Java基本语法-数据类型转换-int向byte、short、char型变量赋值.avi 北京动力...

    【IT十八掌徐培成】Java基础第03天-01.位运算-数据类型.zip

    在Java中,位运算对于理解计算机底层工作原理、优化代码性能以及在某些特定场景下(如位掩码)非常有用。今天我们将深入探讨Java中的数据类型和位运算。 首先,我们来看Java中的数据类型。Java数据类型分为两大类:...

    C#和Java矩阵相乘运算性能比较

    本文旨在通过对C#和Java进行对比研究,特别是针对其可移植性和运算速度,帮助读者更深入地理解这两种语言的特点,并通过矩阵相乘这一具体任务来量化评估它们的性能表现。 #### 可移植性 - **Java**:Java语言以其...

    Java虚拟机-jvm故障诊断与性能优化-源码

    在《实战Java虚拟机——JVM故障诊断与性能优化》一书中,作者深入探讨了如何对JVM进行故障排查和性能调优,通过源码分析来帮助读者理解其内部工作原理。下面我们将根据书中的主题,详细阐述相关的知识点。 1. **JVM...

    java二进制运算器(加、见、乘、除)

    在Java编程语言中,二进制运算是一种基础且重要的概念,尤其对于计算机科学的理解和算法设计至关重要。二进制运算器通常是指一个程序或工具,它能够执行针对二进制数的基本算术运算,如加法、减法、乘法和除法。在这...

Global site tag (gtag.js) - Google Analytics