美文网首页
线程池创建多少线程比较合理

线程池创建多少线程比较合理

作者: Little丶Jerry | 来源:发表于2020-06-01 22:09 被阅读0次

你知道线程池创建多少线程比较合理吗?

在设置线程池线程个数的时候,经常会想到这个问题,是不是设置的线程数越多越好?理解这个问题之前我们要先清楚的知道我们为什么使用多线程。

一、为什么会使用多线程

使用多线程的主要目的我们应该都能回答的出来就是提高程序的性能,这个提高性能其实是指降低延迟,指发送请求到接收到数据的时间,和提搞吞吐量:单位时间能可以处理更多的请求。

降低延迟和提高吞吐量对应的方法有两种:优化算法和机器的硬件性能发挥到极致。

  • 优化算法降低时间和空间复杂度,使的程序执行时间更短。
  • 硬件的性能发挥到极致,具体的指提高 I/O 和 cpu 的利用率,如何提高 I/O 和 cpu 的利用率的举例:如果单核系统中只有一个程序执行又有 IO 操作和 Cpu 计算的代码,当程序执行 IO 操作的时候,Cpu 其实是空闲的,反之 IO 是空闲的,如果这个时候用两个线程去跑这段代码,一个线程执行 IO 操作 ,一个线程执行 Cpu 计算 ,这时 IO 和 Cpu 的利用率是不是发挥了极致?

二、创建多少线程比较合适

经过上面的分析,我们知道创建多少线程能够将硬件的利用率达到最高才是最好的线程数。

我们从线程的应用场景来分析,由于 IO 操作比 Cpu 计算耗时要久的多的,如果我们一段程序有 IO 操作和 Cpu 计算,我们可以称之为 IO 密集型计算。程序中没有 IO 操作只有 Cpu 的话称之为 Cpu 密集型程序。

IO 密集型,是指系统大部分时间在跟 I/O 交互,而这个时间内线程不会占用 CPU 来处理,即在这个时间范围内,可以由其他线程来使用 CPU,因而可以多配置一些线程。如何将硬件利用率达到极致呢?我们将 R = IO 耗时 / Cpu 耗时 我们从上面的例子来看,如果 IO 耗时 / Cpu 耗时 = 10 (我们平常可以用工具 apm 来统计这个比例),创建线程 A 执行 IO 操作,我们希望 IO 操作的时候 Cpu 不能闲着,所以就应该创建 10 个线程去执行 Cpu 计算,当 IO 操作完毕后刚好 Cpu 也执行完毕,他们的利用率都是百分之百,在执行这段代码的时候。这个例子我们要创建 1 + 10 = 11 个线程执行起来效率更高,于是我们就得到了公式: 1 + I/O耗时 / Cpu耗时,如果是多核 Cpu 最佳线程数 = CPU 核数 * [ 1 +(I/O 耗时 / Cpu 耗时)]。

Cpu 密集型,就是指系统大部分时间是在做程序正常的计算任务,例如数字运算、赋值、分配内存、内存拷贝、循环、查找、排序等,这些处理都需要 CPU 来完成。这个就很简单了,Cpu 的核数 = 线程数就行,一般我们会设置 Cpu 核数 + 1,防止由于其他因素导致线程阻塞等。

三、结束语

看到这里想必大家在回答创建多个线程比较合理这个问题有了新的思路,希望能够帮助各位小伙伴!

相关文章

  • 线程池创建多少线程比较合理

    线程池创建多少线程比较合理? 在设置线程池线程个数的时候,经常会想到这个问题,是不是设置的线程数越多越好?理解这个...

  • 线程池创建多少线程比较合理

    你知道线程池创建多少线程比较合理吗? 在设置线程池线程个数的时候,经常会想到这个问题,是不是设置的线程数越多越好?...

  • Java线程池如何合理配置核心线程数?如何去设置呢?

    相信大家都用过线程池,但是线程池数量设置为多少比较合理呢? 线程数的设置的最主要的目的是为了充分并合理地使用 CP...

  • 线程数,射多少更舒适?

    我相信大家都用过线程池,但是线程池数量设置为多少比较合理呢? 线程数的设置的最主要的目的是为了充分并合理地使用 C...

  • 线程池ThreadPoolExecutor使用注意事项

    1. 线程池的作用: 重复利用已经创建好的线程, 降低创建线程和销毁线程的性能开销 合理的设置线程池大小可以避免因...

  • java线程池

    为啥要用线程池呢?因为对象的创建、销毁是比较占用资源的,用线程池能够复用线程,而不是重新创建线程。使用线程池还有以...

  • Java 多线程(九)- 理解线程池

    线程池 合理利用线程池能够带来以下好处: 降低消耗。通过重复利用已创建的线程降低创建和销毁线程的消耗; 提高响应速...

  • java线程池

    线程VS线程池 普通线程使用 创建线程池 执行任务 执行完毕,释放线程对象 线程池 创建线程池 拿线程池线程去执行...

  • Java线程池基础详解

    为什么要使用线程池 反复创建线程开销大 过多的线程会占用太多内存 线程池的好处 加快响应速度 合理利用CPU和内存...

  • 线程池工作流程

    Java线程池主要是用于合理创建线程,减少线程创建销毁频率,最大限度利用CPU性能,JVM根据用户配置先创建一定数...

网友评论

      本文标题:线程池创建多少线程比较合理

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