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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU的“核心数”、“线程数”的关系和区别分别是啥?相关的知识,希望对你有一定的参考价值。

一、关系:

1、线程数可以模拟出不同的CPU核心数。

CPU的核心数指的是硬件上存在着几个核心,而线程数可以模拟出多个核心数的功能。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。

2、对于一个CPU,线程数总是大于或等于核心数的。

一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。 

二、区别:

1、存在形式不同。

(1)、CPU的核心数指的是硬件上真实存在的物体;

(2)、CPU的线程数只是一种逻辑上的概念,并非真实存在的物体,只是为了更好地描述CPU的运作能力。

2、线程数对于不同的CPU类型存在状态不同。 

(1)、对于Intel的CPU:除了核心数的说法之外,还可以使用线程数的概念,因为它是通过Intel超线程技术来实现的。

(2)、对于AMD的CPU:只有核心数的说法,而没有线程数的概念,因为AMD的CPU没有超线程技术,一个CPU核心固定地对应一个线程。

3、出现原因不同。

(1)、核心数出现的原因:处理器主频提升上的技术遇到瓶颈,向“多核心”的方向发展可以在不用进行大规模开发的情况下将现有产品发展成为理论性能更为强大的多核心处理器系统,也因此出现了“核心数”的说法。

(2)、线程数出现的原因:为了进一步提高计算机多任务处理的工作能力。线程数越多,越有利于同时运行多个程序。

扩展资料:

线程数的多少,自然会影响到下载速度的多少,这样看来,下载线程数应该设置的越高越好,这样的理解是错误的。线程数的多少,要根据服务端和用户端的具体情况而定。

一般情况下,网络中的服务端,为用户提供的连接线程数,在1—10个,用户可以根据不同的服务端限制,来修改下载软件的原始下载线程数。根据下载资源的热门程度,其候选资源数量的不同,该任务下载可用的线程数也会不同,一般可以设置在35-50之间。

参考资料来源:百度百科-核心数量

参考资料来源:百度百科-线程数

参考技术A

核心数与线程数可能不同

核心相同时,线程越多越好,线程最少等于核心数或者等于几倍核心数,

核心是可以分别独立运行程序指令计算单元。

线程是操作系统能够进行运算调度的最小单位。

一般一个核心可以处理一个线程,intel 发明了多线程技术,可以一个核心运算两个线程,比如i3

cpu,为双核四线程,i7有六核12线程;AMD没有

cpu线程越多,cpu运行处理效能越强.

cpu线程多,可让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时.

当没有多个线程可用时,多线程处理器几乎和传统的宽发射超标量处理器一样.同时多线程cpu最具吸引力的是只需小规模改变处理器核心的设计,几乎不用增加额外的成本就可以显著地提升效能.多线程技术则可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间.这对于桌面低端系统十分具有吸引力.

线程,有时被称为轻量级进程,是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行.由于线程之间的相互制约,致使线程在运行中呈现出间断性.线程也有就绪、阻塞和运行三种基本状态.每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身

参考技术B CPU的核心数与线程数的关系和区别。
简单地说,CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组,等等,依次类推。
线程数是一种逻辑的概念,简单地说,就是模拟出的CPU核心数。比如,可以通过一个CPU核心数模拟出2线程的CPU,也就是说,这个单核心的CPU被模拟成了一个类似双核心CPU的功能。我们从任务管理器的性能标签页中看到的是两个CPU。
比如Intel 赛扬G460是单核心,双线程的CPU,Intel 酷睿i3 3220是双核心 四线程,Intel 酷睿i7 4770K是四核心 八线程 ,Intel 酷睿i5 4570是四核心 四线程等等。
对于一个CPU,线程数总是大于或等于核心数的。一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。
CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的,最早应用在Pentium4上。如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。
CPU之所以要增加线程数,是源于多任务处理的需要。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。
在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中输入“cpu get *”即可查看物理CPU数、CPU核心数、线程数。其中,
Name:表示物理CPU数
NumberOfCores:表示CPU核心数
NumberOfLogicalProcessors:表示CPU线程数

Java如何依据cpu核数设置合适的线程数

现状:
服务器为64核,有多种类型的线程,其中一种线程的线程数目前设置为5,但是在特殊情况下(某个时间点数据突发量大时)处理能力无法满足需求。暂时的解决办法是提高设置的线程数。
So:
1、向各位请教一下Java如何依据cpu核数设置合适的线程数。
2、多种类型的线程的线程数总和太多是否会对服务器的应用产生不好影响。

1:获取cpu核心数:

Runtime.getRuntime().availableProcessors();

     创建线程池:

Executors.newFixedThreadPool(nThreads);//nThreads为线程数

2:这个只要服务器内存够大,CPU核心数较多,处理数据比较强就好了,注意不要一下分配几千个线程,可 能会导致堆栈溢出的,这样程序就挂了,因为线程很费内存资源

追问

谢谢你的回答。

因为业务的需要,实际上建了可能有三四个线程池(线程数少的5个,多的16个)。而且该服务器并不只是用来做那四个线程池的逻辑,现在想评估一下64核的服务器在不影响性能的前提下可以创建多少个线程。

参考技术A 其实这线程数没有明确值,根据自己的日常业务测试吧,结合内存大小,像我以前工作的服务器ibm3650服务器设置15也没有问题的。

以上是关于CPU的“核心数”、“线程数”的关系和区别分别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

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

(转)CPU的核心数线程数的关系和区别

线程池大小设置,CPU的核心数线程数的关系和区别,同步与堵塞完全是两码事

线程池大小设置,CPU的核心数线程数的关系和区别,同步与堵塞完全是两码事

CPU的核心数 和几核之间的关系是啥

CPU的核心数和线程数分别代表啥?