美文网首页Java多线程
最佳线程数计算

最佳线程数计算

作者: Lucie_xxm | 来源:发表于2020-06-23 09:22 被阅读0次

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

根据应用场景

  • CPU 密集型
  • I/O密集型程序

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)工具可以帮我们得到准确的数据

  • SkyWalking
  • zipkin

例子:

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

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

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

线程数 = 8 * (1 + 100/5) = 168 (个)
  • 那如果DB的 QPS(Query Per Second)上限是1000,此时这个线程数又该设置为多大呢?

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

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

相关文章

  • 最佳线程数计算

    并发编程适用于什么场景? 根据应用场景 CPU 密集型 I/O密集型程序 CPU 密集型 一个完整请求,I/O操作...

  • tomcat的maxThreads、acceptCount(最大

    最佳线程数总结(1) 多线程JBoss应用服务器WebTomcat 最佳线程数: 性能压测的情况下,起初随着用户数...

  • 多线程

    多线程使用场景: 主要是提升性能,降低延迟,提高吞吐量。 最佳线程数原则:将硬件的性能发挥到极致。 最佳线程数 =...

  • 线程数与QPS计算

    01 最佳线程数计算 1.1 cpu密集型 n+1当因为页缺失或其它故障而导致某一线程暂停时,额外的线程可以保证c...

  • markdown使用测试

    区块引用: 源: ```//端口号、CPU数读取,工作线程数计算string strSvrPort;g_confi...

  • 线程池使用注意事项

    1.使用new ThreadPoolExecutor()创建线程池2.设置合理的线程数,x是计算时间,y是等待时间...

  • 线程数

    T(线程数) = N(服务器内核数) * u(期望cpu利用率) * (1 + E(等待时间)/C(计算时间));...

  • 线程数计算机公式

    IO密集型:以大量任务读写数据库,读写文件为主,内存中的运算很少,线程基本阻塞在IO上面。这种情况下,尽量多开启一...

  • ThreadPoolExecutor七大构造参数详解

    corePoolSize:线程池核心线程数(平时保留的线程数) maximumPoolSize:线程池最大线程数(...

  • 线程池参数配置及执行顺序

    线程池按以下行为执行任务 1. 当线程数小于核心线程数时,创建线程。 2. 当线程数大于等于核心线程数,且...

网友评论

    本文标题:最佳线程数计算

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