美文网首页
线程池数量以及队列长度如何分配?

线程池数量以及队列长度如何分配?

作者: 名字是乱打的 | 来源:发表于2021-12-01 00:53 被阅读0次

线上线程池配置是个小问题,但是不当的选用也可能会成为我们系统的瓶颈,甚至导致系统崩溃,因此这个问题不能忽略,且要实践出真知。

下面我们分析一波,怎么配置会让我们系统处理能力更快?

一.什么会影响系统处理能力?

首先我们几乎可以忽略队列本身占内存的情况,主要考虑多线程取队列数据竞争问题以及线程数量

1.关于线程数

  • 线程数不能太少,太少了极有可能造成等待/排队时间过长
  • 线程数也不能太多,占用过多内容

而线程池以及线程数的选用真正线程数的选用主要看压测,看看处理时间

2.线程池的分配方式

单一变量原则,我们可以固定我们的线程数量来进行压测看看,比如说我们固定要创建64个线程,那么可以有以下几种线程池分配方式

  • 单队列多线程 1*64
  • 多队列单线程 64*1
  • 多队列多线程 M*N=64

3. 3种方式主要区别在哪里呢?

  • 如果我们是单队列多线程,那么就存在一个多个线程去同一个队列中抢夺资源的情况
  • 而多个队列单线程,则没有竞争问题,但是存在另外一个问题,如果我们某个队列放了一个非常耗时的数据,比如说50s处理完,那么分配给这个队列的请求全部进入等待队列,这样极有可能出现oom的情况。
  • M*N算折中办法

二. 压测实践出真知

我们先要找出最优情况,在没有慢请求的情况下64*1的速度必然是处理速度最快的,然后我们可以进行多种情况压测,看看谁最接近我们最优情况那就是哪个配置更适合我们。

通常情况下慢查询比较多可以少队列,多线程,如果查询速度非常快,可以偏向于用多队列单线程,选择方向即少竞争,少阻塞,最终配置要看压测,这玩意很玄,想直接数学计算不太行

相关文章

  • 线程池数量以及队列长度如何分配?

    线上线程池配置是个小问题,但是不当的选用也可能会成为我们系统的瓶颈,甚至导致系统崩溃,因此这个问题不能忽略,且要实...

  • 多线程 | 4.线程池

    Java并发编程:线程池的使用 线程池基础 请求队列 线程池维护一定数量的线程,当线程池在运行状态的线程数量达上...

  • java线程池自动扩容

    线程池构造方法有几个重要参数: 当线程池核心数量不够时,新加入的任务会被存放在队列中,如果队列存满了,线程池会创建...

  • 聊聊Java线程池那些事

    为什么使用线程池 线程池作用就是通过限制系统中执行线程的数量从而达到优化资源分配的目的。 控制执行线程的数量 假如...

  • 线程池工具

    功能简介 固定线程、限制最大队列长度的自定义线程池; 定制线程池加载任务、子线程各种参数,如分页大小、是否子线程出...

  • Java的五种线程池

    1.固定数量线程池newFixedThreadPool 创建一个可重用的固定数量的无界队列的线程池。在任何时候,最...

  • Linux 线程池,执行任务队列(生产者消费者模型)

    两个结构体 线程池线程池结构体包含任务队列和线程数组两个结构体,和一些锁,条件变量,长度等成员 任务任务队列是一个...

  • 线程池的原理

    线程数量和队列的关系流程的示意图线程池的优势小刘老实讲源码 线程池的优势 线程池是 Java 中对线程进行统一管理...

  • 对于线程池的理解

    线程池的作用:控制线程的数量,处理过程中把任务放到队列中,然后在线程创建后启动这些任务。如果线程数量超过了最大数量...

  • Thread

    队列 线程锁 多线程,线程池 队列 多线程爬虫示例 多线程 自定义线程 线程池

网友评论

      本文标题:线程池数量以及队列长度如何分配?

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