假设我是一个CPU,我如今须要process(吃)一些食物,我如今只有一张嘴。linux
假如我有多张嘴,确定就能够process更多的食物。这就是multi-core processor所要想要完成的任务。可是因为某些缘由及限制,有时候没法实现这种方式。程序员
我只有一张嘴,我能够用手抓一片食物,送到嘴边,而后在嘴busy的时候,抓起下一片食物,继续送到嘴边。若是出现这种状况:当个人嘴已经吃完那一片食物了,这个时候手尚未将食物送到嘴边,这时候个人嘴就处于空闲状态。假如我有两只手,即便个人嘴并不能吃得更快,但个人嘴也不须要浪费任什么时候间,能够一直处于busy的状态。这就是hype-threading(超线程),一个processor,而后加上很智能的调度系统,使得processor能够一直处于busy的状态。api
超线程对单线程的任务,也就是后面一部分任务必须依赖于前面一部分任务,并无太大做用。 缓存
好比你要吃一个两勺冰淇淋锥,你必须先吃掉上面的部分,而后才能吃下面的部分。在这种状况下,增长更多的嘴或者手,都是没有什么意义的。微信
在现实生活中,受益于超线程和多核处理器的常见任务有:多线程
好比编辑视频,视频是一帧一帧的,彻底能够在编辑这一帧的时候同时编辑另一帧。性能
总结一下:超线程的目的,就是使得processor busy,充分利用CPU资源。因此,超线程并无他名字听上去那么神奇,fetch
首先须要理清楚CPU核core的关系: 操作系统
超线程是intel开发的,已经有10多年的历史了,它能够在同一时刻,执行两个线程,从而提升了单个CPU core的效率。以下图所示: 线程
来简略看一下CPU的发展阶段: 刚开始,一个CPU只有一个core,一个CPU只能同时运行一个线程:
接着,CPU设计师开始往一个CPU里面添加更多的core,如今一个CPU就能够同时运行多个线程了:
为了进一步提升CPU的性能,Intel又发明了超线程。超线程把一个物理的core,在逻辑上分红了两个虚拟核(two virtual cores)。如今,在操做系统的眼里,这个2核CPU实际上就是一个4核CPU了。
咱们仍是从最开始、最简单的提及。
首先是单核CPU,树莓派使用的就是单核CPU,可是树莓派依然能够运行多任务的linux系统。为何呢?实际上在底层,操做系统在不停地切换不一样的任务,速度之快到让你以为他们是真的同时运行的。
而后是多核CPU,如上所说的,不一样的core之间在逻辑上是独立的,他们会共享一些资源。操做系统就能够给不一样的core分发不一样的任务,若是你要运行一个多线程的任务,你拥有的core越多,速度就会越快。
再而后就是超线程了。要在一个core上面实现两个线程,那么这个core该怎么设计呢?
把这种core组合一下,就成了多核CPU,且每一个CPU都支持超线程技术。
接着再来看一个现实生活中的栗子:地铁过安检。
把队伍换成前面说的两个FRONTEND接口,把安检员看成是core,每一个接口都能独立得fetch指令,而后把指令传递给core。core在真正执行指令的时候,是会产生竞争的,**因此在性能上来讲,一个有超线程能力的单核CPU,是没法和一个双核CPU相比的。**只有当其中一个queue阻塞的时候,才能获得双倍的性能。通常而言,有超线程的核,性能上是没有超线程的核的1.25倍。
那么咱们来作一个计算题:一个6核12线程的CPU,和一个8核8线程的CPU,哪个综合性能要好一点?
因此,8核8线程的性能还要相对好一点。
关注个人微信公众号