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


    原文: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密集型程序。

      1. 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耗时)

      2. CPU密集型,这个就很简单了 CPU的核数 = 线程数就行,一般我们会设置 CPU核数+1 防止由于其他因素导致线程阻塞等。

  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/huanshilang/p/12095161.html
Copyright © 2020-2023  润新知