你知道线程池创建多少线程比较合理吗?
线程 创建 比较 知道 多少 合理
2023-06-13 09:18:16 时间
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
作者 | 小鱼儿_karl
来源 | https://www.cnblogs.com/karlMa/p/11356041.html
- 在设置线程池线程个数的时候,经常会想到这个问题,是不是设置的线程数越多越好?理解这个问题之前我们要先清楚的知道我们为什么使用多线程。
为什么会使用多线程
- 使用多线程的主要目的我们应该都能回答的出来就是提高程序的性能,这个提高性能其实是指,降低延迟 指发送请求到接收到数据的时间,和 提搞吞吐量:单位时间能可以处理更多的请求。
- 将近延迟和提高吞吐量对应的方法有两种: 优化算法 和 将机器的硬件性能发挥到极致
- 1 优化算法:降低时间和空间复杂度,使的程序执行时间更短。
- 2 将硬件的性能发挥到极致,具体的指提高I/O 和cpu的利用率 如何提高I/O 和cpu的利用率的举例:如果单核系统中 只有一个程序执行又有IO操作 和Cpu计算的代码,当程序执行IO操作的时候,Cpu其实是空闲的,反之IO是空闲的,如果这个时候用两个线程去跑这段代码,一个线程执行IO操作 ,一个线程执行Cpu计算 ,这时IO和Cpu的利用率是不是发挥了极致?
创建多少线程比较合适
经过上面的分析,我们知道创建多少线程能够将硬件的利用率达到最高才是最好的线程数。我们从线程的应用场景来分析, 由于IO操作比Cpu计算耗时要久的多的,如果我们一段程序有IO操作 和 Cpu计算 我们可以称之为:IO密集型计算。程序中没有IO操作 只有Cpu的话 称之为Cpu密集型程序。
- IO密集计算,如何将硬件利用率达到极致呢 我们将 R = IO耗时 / Cpu耗时 我们从上面的例子来看 如果IO耗时/Cpu耗时 = 10 (我们平常可以用工具apm来统计这个比例) 创建线程A 执行io操作 我们希望IO操作的时候 Cpu不能闲着 所以就应该创建10个线程去执行Cpu计算 当Io操作完毕后刚好Cpu也执行完毕 ,他们的利用率都是百分之100 在执行这段代码的时候。这个例子我们要创建 1+ 10 = 11个线程执行起来效率更高,于是我们就得到了公式: 1+ I/O耗时/Cpu耗时,如果是多核Cpu 最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / Cpu 耗时)
- Cpu密集型 这个就很简单了 Cpu的核数 = 线程数就行,一般我们会设置 Cpu核数+1 防止由于其他因素导致线程阻塞等。
结束语
看到这里想必大家在回答创建多个线程比较合理这个问题有了新的思路,希望能够帮助各位小伙伴
【往期推荐】
扫一扫,关注我
一起学习,一起进步
每周赠书,福利不断
﹀
﹀
﹀
深度内容
推荐加入
相关文章
- 线程的定义及特点_linux线程创建函数
- 【说站】java线程池有哪些拒绝策略
- 《CLR via C#》笔记:第5部分 线程处理(3)(完结)
- 【多线程实践】一、为何使用多线程&三种线程创建方式利弊分析
- GO系列(3)-协程 线程 进程 基础
- 4. 线程代码创建(五种方法)
- 线程池如何创建线程_创建线程池的七个参数
- java创建线程池代码_java手写线程池
- pthread_create 线程属性-Linux学习——线程的创建和回收
- https://haobin.work/2021/04/30/并发/Java线程池异常处理/
- 阿里二面:说一下Hashmap散列表的三大问题与线程安全问题
- 都2023了还不清楚线程并发基础概念吗
- Java 线程池的创建过程分析详解编程语言
- 深入浅出:Linux线程堆栈大小(linux线程堆栈大小)
- Linux下的通用线程池创建详解编程语言
- Python守护线程及作用(包含2种创建方式)
- linux系统下的多线程创建及其操作(linux线程创建)
- Linux下线程创建的函数使用方法(linux创建线程的函数)
- Linux下创建线程的方法学习(linux创建线程)
- 瓶颈Linux线程瓶颈:探究是否存在(linux线程是否存在)
- 解决Linux下创建线程失败的问题(linux创建线程失败)
- 利用Redis队列加快线程处理效率(redis队列线程数)
- 简单使用BackgroundWorker创建多个线程的教程