前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线程池数量以及队列长度如何分配?

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

作者头像
名字是乱打的
发布2021-12-24 08:31:36
1K0
发布2021-12-24 08:31:36
举报
文章被收录于专栏:软件工程

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

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

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

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

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

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

2.线程池的分配方式

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

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

二. 压测实践出真知

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/1 上,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.什么会影响系统处理能力?
    • 1.关于线程数
      • 2.线程池的分配方式
        • 3. 3种方式主要区别在哪里呢?
        • 二. 压测实践出真知
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档