java 获取2个数差最少的一个_彻底领悟CPU个数、核数、线程数以及与Java多线程的关系...

07ca6851bfff06499191fc8de748c498.png

1、CPU个数

看得见摸得着的芯片个数,也就是主板上的插CPU的插槽个数

2、核数

说清核数,先要理解一个概念:原生多核和封装多核

多核心cpu主要分原生多核和封装多核:

  原生多核指的是真正意义上的多核,最早由AMD提出,每个核心之间都是完全独立的,都拥有自己的前端总线,不会造成冲突,即使在高负载状况下,每个核心都能保证自己的性能不受太大的影响,通俗的说,原生多核的抗压能力强,但是需要先进的工艺,每扩展一个核心都需要很多的研发时间。
  封装多核是只把多个核心直接封装在一起,比如Intel早期的PD双核系列,就是把两个单核直接封装在一起,但两核心只能共同拥有一条前端总线,在两个核心满载时,两个核心会争抢前端总线,导致性能大幅度下降,所以早期的PD被扣上了“高频低能”的帽子,要提高封装多核的性能,在多任务的高压下尽量减少性能损失,只能不断的扩大前端总线的总体大小,来弥补多核心争抢资源带来的性能损失,但这样做只能在一定程度上弥补性能的不足,和原生的比起来还是差了很多,而且后者成本比较高,优点在于多核心的发展要比原生快的多。

CPU核心数是物理上的东西,也就是在CPU下的核心芯片,比如,1核就是包括1个相对独立的核心单元组,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组,为什么这么做,这个是设计决定的;在基于制造成本的考量,当今CPU的架构上很多是封装多核;

核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局

3、线程数

是一种逻辑的概念,简单地说,就是模拟出的CPU核心数,一个核心最少对应一个线程,但通过超线程(HT, Hyper-Threading)技术,一个核心可以有两个线程或多个线程,也就是说它可以同时运行两个或多个线程。

虽然采用超线程技术能够同时执行两个线程,但是当两个线程同时需要某个资源时,其中一个线程必须让出资源暂时挂起,直到这些资源空闲以后才能继续。因此,超线程的性能并不等于两个CPU的性能,而且,超线程技术的CPU需要芯片组、操作系统和应用软件的支持,才能比较理想地发挥该项技术的优势。

CPU之所以要增加线程数,是源于多任务处理的需要。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数

CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的,最早应用在Pentium4上。如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。

4、Windows中查看

在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中分别输入“cpu get Name”,“cpu get NumberOfCores”,“cpu get NumberOfLogicalProcessors”即可查看物理CPU数、CPU核心数、线程数。

1474151a5a03520a2a00489bab0bbbce.png

Name:表示物理CPU数

NumberOfCores:表示CPU核心数 ----》这个是真正的核数,这里1个CPU下有2个核,应该是封装多核(封装在一个CPU下),下面任务管理器和设备管理器看是到是使用ht技术模拟的!

NumberOfLogicalProcessors:表示CPU线程数

注释:VM虚拟机中的CPU选择的核心数实际是代表线程数。

输入“cpu get *”也可

任务管理器和和设备管理器上看到的是线程数

9106a01be88bd4ebe47eb545c11ac638.png

8e002dd4552bc37ddc5eb8a070d16c39.png

5、Java多线程

  • 在当代操作系统中,线程是调度的最小单位、进程是分配资源的最小单位
  • 并发与并行
  1. 并发(concurrent)指两个或多个事件在同一时间发生,这个时间段通常很小,纳秒级计算
  2. 并行(parallel)指两个或多个事件在同一时间发生

io阻塞,线程会释放CPU资源吗?

当线程处于IO操作时,线程是阻塞的,线程由运行状态切换到等待状态。此时CPU会做上下文切换,以便处理其他程序;当IO操作完成后,cpu会收到一个来自硬盘的中断信号,CPU正在执行的线程因此会被打断,回到ready队列。而先前因I/O而waiting的线程随着I/O的完成也再次回到就绪队列,此时CPU可能会选择他执行。

JAVA线程可以同时在多个核上运行吗

操作系统是基于线程调度的,在同一时刻,JAVA进程中不同的线程可能会在不同的核上并行运行

更多干货在公号【java栈长】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值