zoukankan      html  css  js  c++  java
  • 单核CPU、多个CPU(路)、超线程技术、多核CPU(物理核、逻辑核)

    1.单核CPU

    路、CPU、物理核、逻辑核和超线程概念

    一个服务器主板可以插多个CPU称为多路,一个CPU可以有多个物理核。如果开启了超线程,一个物理核可以分成n个逻辑核(一般是2),n为超线程的数量。

    (1)路(多个CPU)

    “路”都是指服务器CPU的数量,也就是服务器主板上CPU插槽的数量。 通常有单路、两路、四路和多路。

    单路指服务器支持1个CPU ;两路指服务器支持2个CPU ;四路指服务器支持4个CPU;多路指服务器支持多个CPU。

    (2)CPU( Central Processing Unit)

    CPU中央处理单元是硬件系统的核心,用于数据的加工处理,能完成各种算术、逻辑运算以及控制功能。CPU不等于物理核,更不等于逻辑核。

    (3)物理核(physical core/processor)

    可以看的到的,真实的cpu核,有独立的电路元件以及L1,L2缓存,可以独立地执行指令。通常有单核、双核、多核。

    单核指一颗CPU中仅有1个运算核心;双核指一颗CPU中集成了2个运算核心;多核指一颗CPU中集成了两个以上的运算核心。

    (4)逻辑核( logical core/processor,LCPU):

    在同一个物理核内,逻辑层面的核。主要是操作系统使用逻辑核来模拟出真实CPU的效果,让应用程序以为有两个CPU在运算(依赖于物理核的高速运算)。

    如果没有开启超线程,逻辑核个数与物理核数相同。当超线程开启后,逻辑核个数是物理核数的2倍。

    (5)超线程( Hyper-threading, HT):1LCPU=1HT

    超线程可以在一个逻辑核等待指令执行的间隔(等待从cache或内存中获取下一条指令),把时间片分配到另一个逻辑核。高速在这两个逻辑核之间切换,让应用程序感知不到这个间隔,误认为自己是独占了一个物理核。每个物理核2个线程,则意味着它是 HT。即每个物理核可以同时运行的执行线程或处理作业的数量为2。

    单核CPU、多线程、多核CPU和多个CPU

    单核处理器:
    单个CPU,且芯片比较大。
    多处理器系统:
    一块主板上有2个或多个CPU芯片,不同CPU间靠系统总线来完成通信。
    通信效率较低,无法充分利用每个CPU提供的计算能力。
    可扩展性较差,想要更多处理能力,需要一个拥有更多处理器的主板。

    出现超线程技术:
    相同的芯片中复制一些CPU内部组件,例如寄存器或一级缓存,以便在两个不同的执行线程之间共享信息,而不必通过总线,加快计算过程。
    一个芯片中,通过进程的切换,来达到并行处理的目的。从操作系统角度来看,就像是有两个CPU在工作。
    注意:不可能产生一个物理核2倍的处理能力。也不可能提供完全并行处理能力。
     

    多核架构处理器
    小型化所有处理器组件,称之为一个物理核心。多个物理核心封装在一个芯片中,就形成了多核架构。
    每个物理核心之间通过内部总线进行通信,不需要通过系统总线。每个物理核心之间也相对独立,可实现完全并行处理能力。
    性能方面:1个双核CPU > 1个单核CPU超线程 > 2个单核CPU非超线程

    (1)单核CPU

    相当于阻塞程序,在工作期间只能执行某一个程序!

    (2)多线程

    a:.线程越多越好吗?什么时候才有必要用多线程?

    线程必然不是越多越好,线程切换也是要开销的,当你增加一个线程的时候,增加的额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。

    (3)多核CPU

    多核CPU指多个物理核集成在一个CPU芯片中,每个核都有自己的寄存器,alu运算单元等,但是一级二级缓存是共享的,可以通过内部总线来实现更快的数据交互。每个核的工作是完全并行的,由操作系统来决定多核处理器上的任务调度。常用的调度算法如下:

    a.全局队列调度

    指操作系统维护一个全局的任务等待队列,当系统中有一个CPU核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。

    优点:是CPU核心利用率较高。目前多数多核CPU的操作系统采用此种任务调度算法。

    b.局部队列调度

    指操作系统为每个CPU物理内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行。

    优点:任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率,从而提高系统的性能。

    什么时候该使用多线程呢?这要分四种情况讨论:

    a.多核CPU——计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置。

    b.单核CPU——计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。

    c.单核CPU——IO密集型任务,使用多线程还是为了人机交互方便,

    d.多核CPU——IO密集型任务,这就更不用说了,跟单核时候原因一样。

    多核也要用多线程才能发挥优势。
    同样,多线程要在多核上才能真正有优势。
    这点来说,对程序员不是透明的。程序员可以控制程序/线程在哪个CPU(核)上运行。用户也可以控制程序在哪几个核上运行。所以多核,多线程对用户和程序员都不是透明的。程序员必须了解这方面的知识。才能让程序最大限度的发挥机器的性能。

    参考文档:

    性能基础之CPU、物理核、逻辑核概念与关系

    单核CPU与多核CPU工作原理

  • 相关阅读:
    django LDAP
    Python egg
    皮皮书屋
    Linux运维
    bash shell 快捷键汇总
    linux ldconfig
    Linux set env export declare unset
    OpenStack
    【LeetCode】258. Add Digits
    一个"Median Maintenance"问题
  • 原文地址:https://www.cnblogs.com/badboy200800/p/12641255.html
Copyright © 2011-2022 走看看