精华内容
下载资源
问答
  • 小伙伴们知道要如何合理设置线程池大小吗?下面跟小编一起来看看吧。一般来说,我们线程池究竟设置多大是基于要线程池任务来分析的,不同的任务类型,我们设置的方式当然也需要改变。通常的任务类型一般是:CPU密集型...

    在连接数据库时我们经常会用到线程池,而有时候我们就会烦恼,线程池的大小究竟该设置成多大才合适呢?小伙伴们知道要如何合理设置线程池大小吗?下面跟小编一起来看看吧。

    一般来说,我们线程池究竟设置多大是基于要线程池任务来分析的,不同的任务类型,我们设置的方式当然也需要改变。

    通常的任务类型一般是:CPU密集型、IO密集型、混合型,对不同类型的任务我们就需要分配不同大小的线程池

    1)、CPU密集型

    这种任务我们要尽量使用较小的线程池,一般是Cpu核心数+1

    因为CPU密集型任务CPU的使用率很高,若开过多的线程,只能增加线程上下文的切换次数,带来额外的开销

    2)、IO密集型

    方法一:可以使用较大的线程池,一般CPU核心数 * 2

    IO密集型CPU使用率不高,可以让CPU等待IO的时候处理别的任务,充分利用cpu时间

    方法二:线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。

    下面举个例子:

    例如:平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。这个公式进一步转化为:

    最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目

    3)、混合型

    是一种可以将任务分为CPU密集型和IO密集型,然后它可以分别使用不同的线程池去处理,按情况而定。

    以上就是关于线程池合理设置大小的所有内容,如若需要了解更多相关java常见问题及答案请记得关注我们奇Q工具网。

    推荐阅读:

    展开全文
  • 想要合理配置线程池线程数的大小,需要分析任务的类型,任务类型不同,线程池大小配置也不同。配置线程池的大小可根据以下几个维度进行分析来配置合理的线程数:任务性质可分为:CPU密集型任务,IO密集型任务,混合...

    想要合理配置线程池线程数的大小,需要分析任务的类型,任务类型不同,线程池大小配置也不同。

    配置线程池的大小可根据以下几个维度进行分析来配置合理的线程数:

    任务性质可分为:CPU密集型任务,IO密集型任务,混合型任务。

    任务的执行时长。

    任务是否有依赖——依赖其他系统资源,如数据库连接等。

    CPU密集型任务

    尽量使用较小的线程池,一般为CPU核心数+1。

    因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,只能增加上下文切换的次数,因此会带来额外的开销。

    IO密集型任务

    可以使用稍大的线程池,一般为2*CPU核心数+1。

    因为IO操作不占用CPU,不要让CPU闲下来,应加大线程数量,因此可以让CPU在等待IO的时候去处理别的任务,充分利用CPU时间。

    混合型任务

    可以将任务分成IO密集型和CPU密集型任务,然后分别用不同的线程池去处理。

    只要分完之后两个任务的执行时间相差不大,那么就会比串行执行来的高效。

    因为如果划分之后两个任务执行时间相差甚远,那么先执行完的任务就要等后执行完的任务,最终的时间仍然取决于后执行完的任务,而且还要加上任务拆分与合并的开销,得不偿失

    依赖其他资源

    如某个任务依赖数据库的连接返回的结果,这时候等待的时间越长,则CPU空闲的时间越长,那么线程数量应设置得越大,才能更好的利用CPU。

    借鉴别人的文章 对线程池大小的估算公式:

    最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

    比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。

    可以得出一个结论:

    线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。

    展开全文
  • 估算线程池大小

    2018-08-30 13:50:10
    1 cpu密集型: 主要时间用于执行代码。cpu数目+1 2 io密集型: 主要时间用于操作内容,硬盘(查询数据库,nosql)。2*cpu数目+1 3 线程等待时间较长: ...参考文章:如何合理地估算线程池大小?...

    1 cpu密集型:
    主要时间用于执行代码。cpu数目+1
    2 io密集型:
    主要时间用于操作内容,硬盘(查询数据库,nosql)。2*cpu数目+1
    3 线程等待时间较长:
    (线程等待时间/线程的cpu执行时间+1)*cpu数目

    参考文章:如何合理地估算线程池大小?

    展开全文
  • 如何合理设置线程池大小

    万次阅读 多人点赞 2017-04-05 16:49:12
    接着上一篇探讨线程池留下的尾巴,如何合理的设置线程池大小。 要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析: 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。 任务的...

    接着上一篇探讨线程池留下的尾巴,如何合理的设置线程池大小。
    要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析:

    1. 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。
    2. 任务的优先级:高、中、低。
    3. 任务的执行时间:长、中、短。
    4. 任务的依赖性:是否依赖其他系统资源,如数据库连接等。

    性质不同的任务可以交给不同规模的线程池执行。

    对于不同性质的任务来说,CPU密集型任务应配置尽可能小的线程,如配置CPU个数+1的线程数,IO密集型任务应配置尽可能多的线程,因为IO操作不占用CPU,不要让CPU闲下来,应加大线程数量,如配置两倍CPU个数+1,而对于混合型的任务,如果可以拆分,拆分成IO密集型和CPU密集型分别处理,前提是两者运行的时间是差不多的,如果处理时间相差很大,则没必要拆分了。

    若任务对其他系统资源有依赖,如某个任务依赖数据库的连接返回的结果,这时候等待的时间越长,则CPU空闲的时间越长,那么线程数量应设置得越大,才能更好的利用CPU。
    当然具体合理线程池值大小,需要结合系统实际情况,在大量的尝试下比较才能得出,以上只是前人总结的规律。

    在这篇如何合理地估算线程池大小?文章中发现了一个估算合理值的公式

    最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目
    

    比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。这个公式进一步转化为:

    最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目
    

    可以得出一个结论:
    线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。
    以上公式与之前的CPU和IO密集型任务设置线程数基本吻合。

    并发编程网上的一个问题
    高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?
    (1)高并发、任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换
    (2)并发不高、任务执行时间长的业务要区分开看:
      a)假如是业务时间长集中在IO操作上,也就是IO密集型的任务,因为IO操作并不占用CPU,所以不要让所有的CPU闲下来,可以适当加大线程池中的线程数目,让CPU处理更多的业务
      b)假如是业务时间长集中在计算操作上,也就是计算密集型任务,这个就没办法了,和(1)一样吧,线程池中的线程数设置得少一些,减少线程上下文的切换
    (3)并发高、业务执行时间长,解决这种类型任务的关键不在于线程池而在于整体架构的设计,看看这些业务里面某些数据是否能做缓存是第一步,增加服务器是第二步,至于线程池的设置,设置参考(2)。最后,业务执行时间长的问题,也可能需要分析一下,看看能不能使用中间件对任务进行拆分和解耦。

    展开全文
  • 线程池数据库系统非常重要功能,然而MySQL社区版并不包含线程池功能,不过好在MySQL的Percona发行版本提供了这个功能,除此之外,MySQL的企业版也提供线程池,从性价比上说,Percona显然更有吸引力,因为它是开源...
  • 接着上一篇探讨线程池留下的尾巴,如何合理的设置线程池大小。 要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析:任务的性质:CPU密集型任务、IO密集型任务、混合型任务。任务的优先级...
  • Java-如何合理设置线程池大小

    千次阅读 2018-09-20 13:51:34
    如何合理的设置线程池大小。  要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析: 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。 任务的优先级:高、中、低。 任务的执行...
  • 如何设置线程池大小?CPU 密集型任务:这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响...
  • HikariCP是用于数据库的连接池,连接池的大小设置请参考HikariCP ,简单总结下建议设置连接数: connections = (core_count * 2) + effective_spindle_count core_count表示核数, effective_spindle_count表示one ...
  • 思路:创建一个大小合适的线程池,让每个线程分别连接到数据库并进行读取输出操作。连接到数据库import java.sql.DriverManager;import java.sql.SQLException;import com.mysql.jdbc.Statement;public class TEXT {...
  • 疑问如何配置WebSphere Commerce服务器的WebContainer线程池数据库连接池的大小?答案WebContainer线程池数据库连接池是WebSphere Application Server应用服务器可配置的两组重要参数,它的具体配置对WebSphere ...
  • 思路:创建一个大小合适的线程池,让每个线程分别连接到数据库并进行读取输出操作。连接到数据库import java.sql.DriverManager; import java.sql.SQLException; import com.mysql.jdbc.Statement; public class TEX...
  • 本文翻译自  ... 翻译时可能会有不精准的地方,此处仅供参考,望注意!!! ...配置连接池是开发人员经常出错的问题。在配置池时需要理解的原则...在这些情况下,作业队列大小应该是“正确大小”以匹配池(而不是相反)。
  • 思路:创建一个大小合适的线程池,让每个线程分别连接到数据库并进行读取输出操作。连接到数据库import java.sql.DriverManager;import java.sql.SQLException;import com.mysql.jdbc.Statement;public class TEXT {...
  • 线程池

    2019-02-19 23:23:46
    Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行... 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来的问题,类似起到了限流的作用;线程是稀 缺资源,如果无线创建,会造成系统...
  • 基于JAVA线程池读取单个SQL数据库

    千次阅读 2016-04-21 14:00:57
    思路:创建一个大小合适的线程池,让每个线程分别连接到数据库并进行读取输出操作。 主要分为以下步骤: 连接MySQL数据库: import java.sql.Connection; import java.sql.DriverManager; import java.sql....
  • 分析一般从几个角度考虑: ...根据不同的任务可以交给不同规模的线程池执行。 如果是cpu密集型的,尽量减少线程数,如果是IO密集型任务尽量加大线程数,因为io不占用cpu的资源。建议配置2倍CPU个数+1。 ...
  • (2)如果是IO密集型应用,则线程池大小设置为2N+1(或者是2N),线程的应用场景:主要是:数据库数据的交互,文件上传下载,网络数据传输等等 +1的原因是:即使当计算密集型的线程偶尔由于缺失故障或者其他原因而暂停...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 258
精华内容 103
关键字:

数据库线程池大小