美文网首页
线程数量选择

线程数量选择

作者: 策马踏清风 | 来源:发表于2020-06-16 16:30 被阅读0次

为什么需要多线程

  1. 现在的计算机大多数都是多核cpu,单线程运行程序就只能利用其中一个。
  2. 所以根据cpu核心数选取正确的线程数能有效利用资源,提升性能。

程序分类

  1. cpu密集型:就是线程大多数时间都是用于cup的数据处理。
  2. I/O密集型:相对的,这个是程序大多操作都是在执行I/O操作

线程数量选取

  1. cpu密集型:
    理论上线程数量=cpu核心数就行了,一个cpu核心执行一个线程,避免切换线程带来的消耗。
    但是实际上会设置cpu逻辑核心数+1。
    《Java并发编程》

计算(CPU)密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。

  1. I/O密集型:
    这种类型的程序执行时有很大部分时间是在I/O的消耗上,所以会导致cpu空闲时间较多。此时根据cpu核数计算线程数量就不合算了。

最佳线程数 = CPU核心数 * (1/CPU利用率) = CPU核心数 * (1 + (I/O耗时/CPU耗时))

cpu使用率获取

APM(Application Performance Manager)工具可以帮我们找到准确的数据

  1. SkyWalking
  2. CAT
  3. zipkin

相关文章

  • 线程数量选择

    为什么需要多线程 现在的计算机大多数都是多核cpu,单线程运行程序就只能利用其中一个。 所以根据cpu核心数选取正...

  • Java并发编程学习笔记

    线程池 策略 当线程数量未达到核心线程数量,直接启动一个核心线程来执行任务。 如果线程数量已达到或者超过核心线程的...

  • 线程池ThreadPoolTaskExecutor 配置

    参数说明:corePoolSize:线程池维护线程最小数量maxPoolSize:线程池维护线程最大数量keepA...

  • GCD控制线程数量

    1.GCD控制线程数量 2.GCD控制线程数量+线程任务结束通知处理

  • 线程池原理

    一,参数 1,corePoolSize:核心线程数量,线程池可以保留的活跃线程的数量。 2,maximumPool...

  • 一个例子理解java线程池 ThreadPoolExecutor

    创建一个线程池需要7个参数 corePoolSize 核心线程数量 maximumPoolSize 最大线程数量 ...

  • 线程池相关

    1.线程池参数设计 1.1意义 线程池的线程数量设置过多会导致线程竞争激烈; 如果线程数量设置过少的话,还会导致系...

  • 高并发程序阅读笔记 之 线程池

    线程池Executor newFixedThreadPool(int nThreads) 线程数量与最大数量一致。...

  • 对于线程池的理解

    线程池的作用:控制线程的数量,处理过程中把任务放到队列中,然后在线程创建后启动这些任务。如果线程数量超过了最大数量...

  • 多线程 | 4.线程池

    Java并发编程:线程池的使用 线程池基础 请求队列 线程池维护一定数量的线程,当线程池在运行状态的线程数量达上...

网友评论

      本文标题:线程数量选择

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