首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线程设置原则

二:线程参数 ThreadPoolExecutor类可设置的参数主要有: corePoolSize:核心线程 1.核心线程会一直存活,及时没有任务需要执行 2.当线程数小于核心线程数时,即使有线程空闲...,线程也会优先创建新线程处理 3.设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭 一:queueCapacity:任务队列容量(阻塞队列) 当核心线程数达到最大时...线程会创建新线程来处理任务 2.当线程数=maxPoolSize,且任务队列已满时,线程会拒绝处理任务而抛出异常 keepAliveTime:线程空闲时间 1.当线程空闲时间达到keepAliveTime...3.当线程数大于等于核心线程数,且任务队列已满 3.1若线程数小于最大线程数,创建线程 3.2若线程数等于最大线程数,抛出异常,拒绝任务 三:线程参数的合理设置 为了说明合理设置的条件,我们首先确定有以下几个相关参数...若结合CPU的情况,比如,当线程数量达到50时,CPU达到100%,则将maxPoolSize设置为60也不合适,此时若系统负载长时间维持在每秒1000个任务,则超出线程处理能力,应设法降低每个任务的处理时间

7610

java线程参数_java线程参数设置原则,如何设置线程参数比较合理?

线程的参数应该怎样设置呢?相信对于很多的人来说这也是一个比较难的问题,下面就让我们一起来解决一下,究竟应该如何设置线程的参数才是最合理的吧!...1、下游系统抗并发的能力 多线程给下游系统造成的并发等于你设置线程数 例: 假如,是多线程访问数据库,那么就得考虑数据库的连接大小设置,数据库并发太多影响其qps,会将数据库打挂等问题。...队列的大小应该通过前期计算线程任务的条数,来合理的设置队列的大小,不适合太小,让它不会溢出,因为,溢出会走拒绝策略,多多少少对于它的性能会造成一定的影响,与此同时,复杂度也会被增加,所以,这里需要我们好好的考量拒绝策略的选择...如下: 线程的配置 这里的话,发现任务执行的比较慢,机器的cpu,内存等也比较的低,所以,做出了加大线程的决定。...以上就是对于线程参数设置的一个简单介绍了,你都了解了吗?更多内容,请继续关注奇Q工具网的常见问题栏目了解吧。

1.3K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java线程容量设置

    本文由杨青同学投稿,总结了他在近期工作中对线程容量设置的一点经验。...原文发于微信公众号:Java线程容量设置 创建线程的方式 Java中可以通过Executors和ThreadPoolExecutor的方式创建线程,通过Executors可以快速创建四种常见的线程...corePoolSize设置是整个线程池中最关键的参数,设置太小会导致线程的吞吐量不足,因为新提交的任务需要排队或者被handler处理掉(取决于拒绝策略);设置太大可能会耗尽计算机的CPU和内存资源...在压测的过程中发现,当线程数量设置的更合理时TPS更高且接口的RT较低;而线程设置过大导致TPS下降和RT上涨。由于RT和TPS不太方便直接给出,这里仅展示系统负载这一指标的压测结果。...当线程设置过大时: ? 图2 压测时把线程参数设置得很大 当线程设置较为合理时: ?

    1.1K30

    如何设置线程参数大小?

    我们在使用线程的时候,会有两个疑问点: 线程线程数量设置过多会导致线程竞争激烈 如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源 那么如何设置才不会影响系统性能呢?...不过我不太推荐使用它们,因为选择使用 Executors 提供的工厂类,将会忽略很多线程的参数设置,工厂类一旦选择设置默认参数,就很容易导致无法调优参数设置,从而产生性能问题或者资源浪费。...通过上图,我们发现线程有两个线程数的设置,一个为核心线程数,一个为最大线程数。在创建完线程之后,默认情况下,线程池中并没有任何线程,等到有任务来才创建线程去执行任务。...我们可以通过下面这张图来了解下线程线程分配流程: ? 计算线程数量 了解完线程的实现原理和框架,我们就可以动手实践优化线程设置了。...在不同的业务场景以及不同配置的部署机器中,线程线程数量设置是不一样的。 其设置不宜过大,也不宜过小,要根据具体情况,计算出一个大概的数值,再通过实际的性能测试,计算出一个合理的线程数量。

    6.7K20

    浅析线程参数设置

    当我们无限的去申请线程的时候就有可能产生OOM等问题 系统无法合理管理内部的资源分布,会降低系统的稳定性。比如说我们的mysql有自己的,我们的redis也有自己的。...我们如果使用Java语言的话,我们来分析一下Java线程。 Java中的ThreadPoolExecutor 理论上线程的参数设置情况 ? 理论必定只是理论,到真实的场景中我们的目的性是不一样的。...所以在设置线程的时候我们还是确定一个最后权重比较大的目标去设置线程的目的我们也知道了,大概设置的基础理论也清楚了。看看美团技术团队给的两个场景。...另外,使用线程也是有考量的,这种场景最重要的就是获取最大的响应速度去满足用户,所以应该不设置队列去缓冲并发任务,调高corePoolSize和maxPoolSize去尽可能创造多的线程快速执行任务。...总结 线程的作用 线程理论参数设置参考 场景分析 参考 美团技术团队-Java线程实现原理及其在美团业务中的实践

    1.1K20

    如何合理设置线程大小

    线程CPU时间所占比例越高,需要越少线程。 以上公式与之前的CPU和IO密集型任务设置线程数基本吻合。 并发编程网上的一个问题 高并发、任务执行时间短的业务怎样使用线程?...并发不高、任务执行时间长的业务怎样使用线程?并发高、业务执行时间长的业务怎样使用线程?...(1)高并发、任务执行时间短的业务,线程线程数可以设置为CPU核数+1,减少线程上下文的切换 (2)并发不高、任务执行时间长的业务要区分开看:   a)假如是业务时间长集中在IO操作上,也就是IO密集型的任务...)一样吧,线程池中的线程设置得少一些,减少线程上下文的切换 (3)并发高、业务执行时间长,解决这种类型任务的关键不在于线程而在于整体架构的设计,看看这些业务里面某些数据是否能做缓存是第一步,增加服务器是第二步...,至于线程设置设置参考(2)。

    1.7K55

    线程大小的设置策略

    线程大小的设置策略 线程需要设置合适的大小,假如设置的太大,线程上线文切换过于频繁,造成大量资源开销,反而会使性能降低。...假如设置的太小,存在很多可用的处理器资源却未在工作,会造成资源的浪费和对吞吐量造成损失。 为了充分利用处理器资源,创建的线程数至少要等于处理器核心数。...如果所有的任务都是计算密集型的,那么线程数等于可用的处理器核心数就可以了。不过,如果所有的任务都是IO密集型,那么处理器大部分时间是空闲的,所有要适当的增加线程数。...线程等待时间所占比例越高,需要越多线程线程运算时间所占比例越高,需要越少线程。...于是可以使用下面的公式进行估算: 最佳线程数 = (1 + 线程等待时间/线程计算时间)* 目标CPU的使用率 * 处理器核心数 例如:平均每个线程计算运行时间为0.5s,而线程等待时间(非计算时间,比如

    46450

    线程系统设置最全指南!

    线程通过创建可以重复用于多个任务的线程来减少这种开销。 可伸缩性:线程可以根据应用程序的需求进行扩展。例如,在负载较重时,线程可以扩展以处理额外的任务。...2 设置线程大小:了解系统和资源限制 在确定线程大小时,了解系统的限制,包括硬件和外部依赖项,是至关重要的。...(String[] args) {         HikariConfig config = new HikariConfig();         config.setJdbcUrl("jdbc:mysql...如果设置目标CPU利用率过高,你的应用程序可能会变得无响应*。如果设置得太低,你的应用程序将无法充分利用可用的CPU资源。 Wait time: 这是***线程等待I/O操作完成的时间***。...I/O密集型线程将有3个线程,而CPU密集型线程将有2个线程。 参考: 编程严选网

    23210

    线程大小 + 线程数量到底设置多少?

    可能很多人都看到过一个线程设置的理论: CPU 密集型的程序 - 核心数 + 1 I/O 密集型的程序 - 核心数 * 2 不会吧,不会吧,真的有人按照这个理论规划线程数?...真实程序中的线程数 那么在实际的程序中,或者说一些Java的业务系统中,线程数(线程大小)规划多少合适呢?...默认Tomcat容器+HikariCP连接+G1回收器,如果此时项目中也需要一个业务场景的多线程(或者线程)来异步/并行执行业务流程。...因为此时这台主机上,已经有很多运行中的线程了,Tomcat有自己的线程,HikariCP也有自己的后台线程,JVM也有一些编译的线程,连G1都有自己的后台线程。...()的区分,I/O线程一般不是瓶颈,所以不必太多,但业务线程很容易称为瓶颈 Redis 6.0以后也是多线程了,不过它只是I/O 多线程,“业务”处理还是单线程 所以,不要纠结设置多少线程了。

    12.4K45

    Java并发线程到底设置多大?

    那么在用到并发功能的过程中,就肯定会碰到下面这个问题 并发线程到底设置多大呢?...通常有点年纪的程序员或许都听说这样一个说法 (其中 N 代表 CPU 的个数) CPU 密集型应用,线程大小设置为 N + 1 IO 密集型应用,线程大小设置为 2N 这个说法到底是不是正确的呢?...因为线程的大小只能服务器的核数有关,所以这个说法是不正确的。那具体应该怎么设置大小呢? 假设这个应用是两者混合型的,其中任务即有 CPU 密集,也有 IO 密集型的,那么我们改怎么设置呢?...那么我们到底该怎么设置线程大小呢?有没有一些具体实践方法来指导大家落地呢?让我们来深入地了解一下。...CPU 个数 cat /proc/cpuinfo| grep "processor"| wc -l 总结 合适的配置线程大小其实很不容易,但是通过上述的公式和具体代码,我们就能快速、落地的算出这个线程设置的多大

    1.1K30

    如何合理设置Java线程大小

    如何合理设置Java线程大小:依据任务类型定制策略 Java线程的合理配置直接关系到系统性能和资源利用率。...根据任务性质的不同,合理的线程大小设置策略也有所区别,主要包括CPU密集型、IO密集型及混合型任务。 1....设置策略:线程大小建议设置为CPU核心数+1。因为对于CPU密集型任务,增加线程数量并不能提高执行效率,反而可能导致线程上下文切换的额外开销,降低系统性能。...设置策略: 方法一:推荐线程大小设置为CPU核心数*2。由于I/O操作不占用CPU,增加线程可以让CPU在等待I/O时处理其他任务,提升CPU利用率。...设置策略:针对这种情况,较为理想的做法是将任务拆分为CPU密集型和IO密集型,分别使用专门的线程处理。这样可以根据各自的特点,按照上述原则分别设置合适的线程数。

    17110

    java中线程参数设置

    本文主要介绍线程是解决了哪些问题以及线程池中 的corePoolSize(核心线程数),queueCapacity(等待队列的长度),maximumPoolSize(最大核心线程数)。...本文不会对线程各个参数介绍,假定你已经了解了线程各个参数的含义。 1 为什么要有线程呢?...高qps情况下容易出现OOM(unable to create new native Thread) 4、操作系统本身也不允许线程无限对增长 基于以上4个问题,线程应运而生。...线程池中核心线程数能够重复使用,应对高qps无须频繁新建线程,进而减少线程之间切换的耗时;阻塞队列能够暂时缓存新到任务,作为新建线程的缓冲。...2 线程核心参数的计算 先列出计算公式,然后举例解释说明 2.1 核心线程数 corePoolSize=20% * taskNum/(单线程/AR)=20% * 任务数 * 平响 taskNum是指任务数量

    63920

    MySQL MySql连接数与线程

    Threads_running:非睡眠状态的连接数,通常指并发连接数 线程 线程由许多线程组构成,每个组管理一系列客户端连接。...否则,线程会认为该语句执行滞后,并开启另一个线程作为监听线程(如果有必要的话)。为了保证没有线程组被执行滞后的语句阻塞,线程有个后台线程定期监控线程组状态。...这种阻塞会导致线程组变得不可用,所以会有针对线程组的回调来确保线程可以在改组中立即开启一个新的线程来执行其它的语句。当返回一个阻塞线程时,线程允许立即重启它。...…… 参考连接: http://dev.mysql.com/doc/refman/5.7/en/thread-pool-operation.html 1、 线程调优 thread_pool_size...l 如果主引擎为MyISAM, thread_pool_size设置应该相当低。该值设置为4到8,倾向于获取最优性能。更高值设置对性能倾向于有点负面但不显著的影响。

    6.7K20

    到底如何设置 Java 线程的大小?

    那么在用到并发功能的过程中,就肯定会碰到下面这个问题 并发线程到底设置多大呢?...通常有点年纪的程序员或许都听说这样一个说法 (其中 N 代表 CPU 的个数) CPU 密集型应用,线程大小设置为 N + 1 IO 密集型应用,线程大小设置为 2N 这个说法到底是不是正确的呢?...因为线程的大小只能服务器的核数有关,所以这个说法是不正确的。那具体应该怎么设置大小呢? 假设这个应用是两者混合型的,其中任务即有 CPU 密集,也有 IO 密集型的,那么我们改怎么设置呢?...那么我们到底该怎么设置线程大小呢?有没有一些具体实践方法来指导大家落地呢?让我们来深入地了解一下。...CPU 个数 cat /proc/cpuinfo| grep "processor"| wc -l 总结 合适的配置线程大小其实很不容易,但是通过上述的公式和具体代码,我们就能快速、落地的算出这个线程设置的多大

    1.7K20

    如何合理设置 Java 线程的大小?

    那么在用到并发功能的过程中,就肯定会碰到下面这个问题 并发线程到底设置多大呢?...通常有点年纪的程序员或许都听说这样一个说法 (其中 N 代表 CPU 的个数) CPU 密集型应用,线程大小设置为 N + 1 IO 密集型应用,线程大小设置为 2N 这个说法到底是不是正确的呢?...因为线程的大小只能服务器的核数有关,所以这个说法是不正确的。那具体应该怎么设置大小呢? 假设这个应用是两者混合型的,其中任务即有 CPU 密集,也有 IO 密集型的,那么我们改怎么设置呢?...那么我们到底该怎么设置线程大小呢?有没有一些具体实践方法来指导大家落地呢?让我们来深入地了解一下。...CPU 个数 cat /proc/cpuinfo| grep "processor"| wc -l 总结 合适的配置线程大小其实很不容易,但是通过上述的公式和具体代码,我们就能快速、落地的算出这个线程设置的多大

    1.4K20

    MySQL 线程&连接&长连接&短连接

    线程 简介 1、mysql每连接每线程mysql都分配一个单独的线程,该线程处理客户端发来的所有命令 2、每个线程会占用一定的系统资源,线程数越多消耗的系统资源也越多 3、线程的创建和销毁有一定的开销...4、当线程数过多时,如果大部分线程都处于活跃状态,会导致频繁的上下文切换,从而造成系统巨大的开销 5、线程的本质就是线程共用,多个连接之间共享线程 何时使用 1、在有大量短查询的业务场景下 2、大量长查询的业务场景下不适合使用线程...,由于长查询占据了线程线程,导致线程出现效率低下的情况 组成 1、线程由多个分组组成 2、每个分组由一个任务队列、一个listener线程以及多个worker线程组成 3、还存在一个timer线程...(用于检查线程分组的状态以及定期清理掉过期的客户端连接) 连接 简介 1、连接是一些网络代理服务或应用服务器的特性(如J2EE服务器) 2、实现了一个持久连接的“”,允许其它程序,客户端来连接...参考:《MySQL DBA 修炼之道》

    1.8K20

    MySQL线程问题个人整理

    本文就来详细讲述一下MySQL线程相关的知识,以帮助广大DBA快速了解MySQL线程机制,快速配置MySQL线程以及了解里面存在的一些坑。...2、对系统起到保护作用 线程技术限制了并发线程数,相当于限制了MySQL的runing线程数,无论系统目前有多少连接或者请求,超过最大设置线程数的都需要排队,让系统保持高性能水平。...可能有的DBA会把线程和连接混淆,其实两者是有很大区别的,连接一般在客户端设置,而线程是在DB服务器上配置;另外连接可以取到避免了连接频繁创建和销毁,但是无法取到控制MySQL活动线程数的目标...将该参数设置为pool-of-threads即启用了线程 thread_pool_size 该参数是设置线程的Group的数量,默认为系统CPU的个数,充分利用CPU资源 thread_pool_oversubscribe...,默认为100000 thread_pool_stall_limit 该参数设置timer线程的检测group是否异常的时间间隔,默认为500ms 三、MySQL线程的使用 线程的使用比较简单,只需要添加配置后重启实例即可

    5.4K111

    线程-线程的好处

    所以需要通过线程协调多个线程,并实现类似主次线程隔离、定时执行、周期执行等任务。线程的作用包括: 利用线程管理并复用线程、控制最大并发数等。 实现任务线程队列缓存策略和拒绝机制。...隔离线程环境。比如,交易服务和搜索服务在同一台服务器上,分别开启两个线程,交易线程的资源消耗明显要大;因此,通过配置独立的线程,将较慢的交易服务与搜索服务隔开,避免个服务线程互相影响。...在了解线程的基本作用后,我们学习一下线程是如何创建线程的。...这个值的设置非常关键,设置过大会浪费资源,设置的过小会导致线程频繁地创建或销毁。 第2个参数:maximumPoolSize 表示线程能够容纳同时执行的最大线程数。...但是ThreadPoolExecutor的allowCoreThreadTimeOut 变量设置为ture时,核心线程超时后也会被回收。 第4个参数:TimeUnit 表示时间单位。

    1.3K21
    领券