并发创建多少个线程合适
前言
使用多线程的目的是为了提升程序性能,在并发编程领域,提升性能本质上就是提升硬件的利用率,再具体点,就是提升 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 耗时)]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南