Java多线程

最佳线程数计算

2020-06-23  本文已影响0人  Lucie_xxm

并发编程适用于什么场景?

根据应用场景

CPU 密集型

一个完整请求,I/O操作可以在很短时间内完成, CPU还有很多运算要处理,也就是说 CPU 计算的比例占很大一部分

最佳线程= cpu核数(逻辑) +1

I/O密集型程序

与 CPU 密集型程序相对,一个完整请求,CPU运算操作完成之后还有很多 I/O 操作要做,也就是说 I/O 操作占比很大部分

单核:

最佳线程数 = (1/CPU利用率) = 1 + (I/O耗时/CPU耗时))
计算示例

多核:

最佳线程数 = CPU核心数 * (1/CPU利用率) = CPU核心数 * (1 + (I/O耗时/CPU耗时))

家里不是有矿,CPU核数一般都在16或者32

公式来源:并发编程实战-8.2章节

I/O耗时和CPU耗时和CPU利用率怎样获取

APM (Application Performance Manager)工具可以帮我们得到准确的数据

例子:

假设要求一个系统的 TPS(Transaction Per Second 或者 Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s

如何设计线程个数,使得可以在1s内处理完20个Transaction?

计算操作需要5ms,DB操作需要 100ms,对于一台 8个CPU的服务器,怎么设置线程数呢?

线程数 = 8 * (1 + 100/5) = 168 (个)

题外话:增加 CPU 核数一定能解决问题吗?

这个结论告诉我们,假如我们的串行率是 5%,那么我们无论采用什么技术,最高也就只能提高 20 倍的性能。

上一篇下一篇

猜你喜欢

热点阅读