如何定义线程数线程数

本文探讨了如何合理设计线程数,避免线程频繁切换和资源浪费。介绍了CPU密集型和I/O密集型应用的线程池模型,以及如何根据目标CPU使用率和等待IO时间与计算时间的比率计算最优线程数。计算密集型应用建议线程数等于CPU核心数+1,而I/O密集型则建议为CPU核心数的2倍。
摘要由CSDN通过智能技术生成

设计线程数原则

占用一定数量的cpu执行一定的线程数
线程数过大会导致线程频繁切换
线程数过小会浪费cpu

概念描述

  • cpu执行时间:cpu计算的时间
  • cpu等待事件:IO时间,cpu等待
  • 总时间: 以上两者加和

公式

cpu执行时间/总时间 = cpu数量/总线程数

两种线程池模型

CPU密集型

  • 应用场景:适用于大量数据的计算,减少对磁盘,网络访问的情况下使用(业务场景中性能瓶颈为cpu而非内存,磁盘IO或带宽)
  • 线程数设计:当前机器CPU总数+1

I/O密集型

  • 应用场景:适用于大量数据的交互,性能瓶颈在IO而非cpu上.
  • 线程数设计:当前机器CPU总数*2

最优线程数计算

在《Java并发编程实践》中,是这样来计算线程池的线程数目的:

一个基准负载下,使用 几种不同大小的线程池运行你的应用程序,并观察CPU利用率的水平。
给定下列定义:

概念:

  • Ncpu = 节点cpu数量
  • Ucp = 目标cpu使用率
  • W/C =等待IO时间与计算时间的比率

公式

为保持处理器达到期望的使用率,最优的池的大小等于:

Nthreads = NcpuUcpu(1&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值