cpu个数、核数、线程数的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cpu个数、核数、线程数的关系相关的知识,希望对你有一定的参考价值。

参考技术A cpu个数:是指物理上,也及硬件上的核心数;

核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;

线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数

首先明白几个概念:

(1) 单个cpu线程在同一时刻只能执行单一Java程序,也就是一个线程

(2) 单个线程同时只能在单个cpu线程中执行

(3) 线程是操作系统最小的调度单位,进程是资源(比如:内存)分配的最小单位

(4)Java中的所有线程在JVM进程中,CPU调度的是进程中的线程

(5)Java多线程并不是由于cpu线程数为多个才称为多线程,当Java线程数大于cpu线程数,操作系统使用时间片机制,采用线程调度算法,频繁的进行线 程切换。

a 那么java多进程,每个进程又多线程,cpu是如何调度的呢?

个人理解:操作系统并不是单纯均匀的分配cpu执行不同的进程,因为线程是调度的最小单位,所以会根据不同进程中的线程个数进行时间分片,均匀的执 行每个线程,也就是说A进程中有10个线程,而B进程中有2个进程,那么cpu分给进程的执行时间理论上应该是5:1才合理。

b cpu线程数和java线程数有直接关系吗?

个人理解:没有直接关系,正如上面所说,cpu采用分片机制执行线程,给每个线程划分很小的时间颗粒去执行,但是真正的项目中,线程要做很多的的操 作,读写磁盘、数据逻辑处理、出于业务需求必要的休眠等等操作。

c 如何确定程序线程数?

个人理解:一般情况程序线程数等于cpu线程数的两到三倍就能很好的利用cpu了,过多的程序线程数不但不会提高性能,反而还会因为线程间的频繁切换 而受影响,具体需要根据线程处理的业务考略,不断调整线程数个数,确定当前系统最优的线程数。

Linux上如何查看物理CPU个数,核数,线程数

首先,看看什么是超线程概念

超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。
超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。

 

其次,看看物理CPU个数,核数以及线程数的关系

总核数 = 物理CPU个数 * 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数

上述公式中,逻辑CPU数即线程数

 

如何查看CPU物理个数

# grep ‘physical id‘ /proc/cpuinfo | sort -u

physical id    : 0
physical id    : 1

 

如何查看每个物理CPU的核数

# grep ‘core id‘ /proc/cpuinfo | sort -u | wc -l

8

 

如何查看总的逻辑CPU个数

# grep ‘processor‘ /proc/cpuinfo | sort -u | wc -l

32

32/8/2=2,可见该CPU支持并已打开超线程。

 

如何查看CPU的型号

# dmidecode -s processor-version

Intel(R) Xeon(R) CPU E5-2658 @ 2.10GHz
Intel(R) Xeon(R) CPU E5-2658 @ 2.10GHz

 

关于物理CPU,核数以及超线程的区别

A core is the most basic computational unit of a processor. A processor is made up of one or more cores. Tradition processors had only one core while modern processors have multiple cores.

A core consists of an ALU, CU, and a set of registers.

A core consists of two levels of caches called L1 and L2 which is there in each core.

A processor consists of a cache that is shared by call cores called L3 cache. It is common to all cores.

A processor depending on the architecture can consist of a memory controller and an input/output controller.

Certain processor packages consist of Graphics Processing Units (GPU) as well.

A core that does not have hyper-threading can execute only one instruction at a time while a multicore processor made up of several cores can execute several instructions parallel. If a processor is made up of 4 cores that do not support hyper threading then that processor can execute 4 instructions at the same time.

A core having hyper-threading technology has redundant functional units so that they can execute multiple instructions at a time. For example, a core with 2 threads can execute 2 instructions at the same time hence a processor with 4 such cores can execute 2×4 instructions parallel. These threads are usually called logical cores and the task manager of Windows generally show the number of logical cores but not the physical cores.

以上是关于cpu个数、核数、线程数的关系的主要内容,如果未能解决你的问题,请参考以下文章

CPU的核心数、线程数的关系和区别

Linux查看系统cpu个数、核数、线程数

Linux 进程、线程和CPU的关系,cpu亲和性

CPU的核心数、线程数的关系和区别

CPU使用率和负载,物理CPU个数,核数,线程数

CPU的“核心数”、“线程数”的关系和区别分别是啥?