线程池.线程数量设置

缘起

需要设置线程数量地方:tomcat,mysql,线程池

问题:到底设置多少现成量合适呢?

答案:不是臆测,根据数据说话

1+M+N模型

1:1个监听线程,监听新来的socket

N:N个IO线程,负责对socket进行读写。N一般等于cpu核数

M:业务逻辑处理线程,这里就讨论这个线程数量

为啥要用多线程

单线程不好么,单线程会有等待资源的情况(网络IO,磁盘IO),这时候CPU就可以干点其他事

CPU密集 vs. IO密集

  • 用CPU比较多就是CPU密集;IO比较多就是IO密集

CPU:IO 比测算

Sum内存和IO时间,统计计算

单接口和整体怎么统一:一种方法是先计算一个接口的比,然后根据接口请求梳理和整体QPS比重,计算加权值; 第二种是测试一段时间的内存和IO的整体时间比

线程数量计算

如 2核,CPU:IO = 1:1 那么4个线程就可以占满CPU了 (2/(1/(1+1)))

总结:N核服务器,通过执行业务的单线程分析出本地计算时间为x(CPU占用时间),等待时间为y(IO时间),则工作线程数(线程池线程数)设置为 N*(x+y)/x,能让CPU的利用率最大化。

经验之谈:后端非CPU密集业务,瓶颈都是在IO。实际开发也不会测试每个接口的CPU和IO时间,差不多点设置几十几百都可能。

纯内存场景Redis

CPU1

IO 0

那么就有N*(x+y)/x=N*(1+0)/1=N


END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值