首页 > 编程语言 >【Java】多线程 数目

【Java】多线程 数目

时间:2022-11-11 12:06:59浏览次数:52  
标签:Java 任务 线程 io 密集型 多线程 数目 cpu


今天看到一篇文章,讲多线程数目的,很棒

这个问题还是很容易被忽略的,就是多线程到底是为了什么?

最开始学习多线程的时候,往往将多线程和性能高划等号,只要用了多线程就能提升性能,其实不然。

那么多线程到底应该怎么使用?

上面的文章其实解释的很清楚,多线程是为了让cpu的利用率尽可能高。

首先,任务可以分为cpu密集型和io密集型。

如果多个任务都是cpu密集型的,那么没有必要多线程,如果多线程了反而会降低性能,因为线程切换也会是有开销的。

如果多个任务是io密集型的,那么有必要使用多线程,因为一个任务如果在那做io,cpu其实是空闲的,此时不如让cpu去执行其他的任务,这时多线程才会提高性能。

那么在具体场景中,针对单一任务,如何设置线程数目?

需要做一个假设,一个任务的执行时间=cpu时间+io时间

对于单核,线程数目=1+(io时间/cpu时间)

怎么理解?这个其实是一种理想化的状态,可以这么理解,假设一个任务io时,操作系统总是可以调度到其他需要cpu的任务,那么这个任务的io时间内可以处理的其他任务数目就是io时间/cpu时间个。再加上原本处理这个任务的线程,总数就是这个结果。

如果多核,还需要乘一个核的数目。

这个公式也在文章里有解释。

对于cpu密集型任务,其实只要把线程数设置为核数即可。

 

标签:Java,任务,线程,io,密集型,多线程,数目,cpu
From: https://blog.51cto.com/u_15873544/5844095

相关文章

  • 【Java】NoSuchMethodError
    刚开始写代码时,特别是类似web这种需要很多第三方jar包的项目,经常会遇到这个问题。这次记录下这个报错的原因。简而言之,这个报错是肯定是因为compile时方法存在,但是runtime时......
  • 【Java】反射与单例
    双重检验与静态内部类两种方法都可以实现延迟加载的单例模式。但是无法阻止反射破坏单例,因为反射可以无视修饰权限,直接调用构造方法创建对象,下面是一个例子:packageThreadTe......
  • 【Java】序列化与单例
    之前明白了线程安全且延迟加载的单例如何写,有两种,双重检验和静态内部类。然后为了防止反射破坏单例,在私有构造方法里面加入了一个同步变量的判断,确保构造方法只调用一次。......
  • 【Java】HashMap 实现原理
    Java集合框架有两个顶级接口,一个是collection接口,另一个是map接口,hashmap便是map接口的重要实现类。首先看map接口。根据map键值对的特性,接口中必然有相关的方法,主要是:Vget......
  • 【Java】concurrentHashMap
    concurrentHashMap类引入了段的概念,读操作不需要上锁,写操作只需要获取相应的段的锁即可,而非锁定全部的数据。所以map里面是一个segment的数组,segment里面才是entry的数组。m......
  • 【Java】Map 实现类
    hashmap:遍历时顺序无法保证linkedhashmap:遍历时按照插入顺序treemap:遍历时按照大小顺序linkedhashmap实现上是继承了hashmap,多了一个双向的链表记录插入顺序,重写了迭代器,基......
  • 【Java】 Set实现类
    Set是collection的子接口,对应数学中的集合。与list的最主要的区别是,set无法通过索引取值,因为set是无序的。set还有一个特性是唯一性,不能存相同的元素。第一个实现类是hashse......
  • 【Java】垃圾回收机制 GC
    GC是java中比较有特色的技术,减轻了程序员的负担。当然也是面试中的高频话题。对于垃圾回收,首先要解决的是找出哪些对象是需要回收的。第一个方法是计算引用数目,实现比较简单......
  • springboot 引入外部包的坑Lookup method resolution failed; nested exception is ja
    手动引入jar包<dependency><groupId>com.allinpay.sdk</groupId><artifactId>top-sdk-java</artifactId><version>1.0.5</......
  • java
    Java是一种编程语言和计算平台,由SunMicrosystems在1995年首次发布。它从微末起步,逐渐发展为当今数字世界中很大一部分资产所依赖的基础,是用于构建许多服务和应用程序......