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

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

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

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

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

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

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

    1.关于线程数

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

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

    2.线程池的分配方式

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

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

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

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

    二. 压测实践出真知

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

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

    相关文章

      网友评论

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

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