死磕并发之到底创建多少个线程合适

为什么要使用多线程?

使用多线程的目的就是提升程序性能,在并发编程领域,提升性能本质上就是提升硬件的利用率,再具体点来说,就是提升 I/O 的利用率和 CPU 的利用率。而解决的方案就是多线程

知道了解决方案,问题又来了,创建多少个线程合适呢?多了会造成CPU上下文切换,浪费资源不说性能还上不去,少了吧CPU利用率又上不去。接下来让我们分析下到底创建多少个线程比较合适。

创建多少个线程合适?

创建多少线程合适,要看多线程具体的应用场景。我们的程序一般都是 CPU 计算和 I/O 操作交叉执行的,由于 I/O 设备的速度相对于 CPU 来说都很慢,所以大部分情况下,I/O 操作执行的时间相对于 CPU 计算来说都非常长,这种场景我们一般都称为 I/O 密集型计算;和 I/O 密集型计算相对的就是 CPU 密集型计算了,CPU 密集型计算大部分场景下都是纯 CPU 计算。I/O 密集型程序和 CPU 密集型程序,计算最佳线程数的方法是不同的。

CPU密集型:

理论上 线程的数量=CPU核数 就是最合适的,不过在一般会设置为 CPU核数 + 1,这样因为偶尔的内存页失效或者其他原因导致的线程阻塞,这个线程可以顶上,从保证CPU利用率。

I/O密集型:

如果 CPU 计算和 I/O 操作的耗时是 1:1,那么 2 个线程是最合适的。如果 CPU 计算和 I/O 操作的耗时是 1:2,那多少个线程合适呢

由此我们可得到一个计算公式

单核计算方式:最佳线程数 =1 +(I/O 耗时 / CPU 耗时)

多核计算方式:最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / CPU 耗时)]

 

I/O耗时和CPU耗时可通过工具apm来进行测试。公式只是用来参考,在项目中还需要根据业务来进行压测结果来进行调整。

以上公式只针对单台服务器部署单个应用的场景,有可能一个服务器会部署N个应用,这种就要根据具体场景来调整了。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值