zoukankan      html  css  js  c++  java
  • 从 CPU 说起的多核, 超线程, 多线程与多进程

    中央处理器 Central Processing Unit (CPU) 的别名 [1]

    • 主处理器 main processor
    • 处理器 processor

    CPU 的功能[1:1]

    • 主要是解释计算机指令以及处理计算机软件中的数据 (顺嘴提一下它的兄弟: GPU[2] --- 主要用于图形处理和大量并行计算; FPU[3] --- 主要用于执行浮点数运算, 它可能集成在 CPU 中)

    CPU 主要组成[1:2]

    • 运算器
      • 算术逻辑单元 Arithmetic Logic Unit (ALU), 用于进行二进制 (补码) 的算术运算
      • 累加器
      • 状态寄存器
      • 通用寄存器组
    • 控制器
      • 控制单元 Control Unit (CU), 用于解释存储器中的指令, 并发出各种操作命令来执行指令
      • 程序计数器
      • 指令寄存器
      • 指令译码器
      • 时序产生器
      • 操作控制器

    CPU Die[4]

    • 它是以半导体材料 (通常是硅) 制作的一块集成电路, 在其上可以包含任意数量的 CPU 内核

    CPU 核心, 也称内核[5]

    • 指在 CPU Die 上的独立处理单元, 它可以独立的执行计算机指令 (如果一个 CPU Die 包含多个核心, 那么它可以并行的执行指令, 加快程序的运行速度)

    多核 CPU 与多 CPU[5:1]

    • 多核处理器 (多核 CPU)
      • 一 Die 多核, 指在单一集成电路 (Die) 中封装多个独立的处理器 (成本最高)
      • 多 Die 多核 (一个 Die 上有多个核心) CPU, 但 Die 与Die 之间通过内部总线连接, 最终封装成一个 CPU Package (成本最低)
    • 多处理器 (多 CPU) - 指在不同的集成电路 (Die) 上封装的独立的处理器
      • 多 Die 多核 (一个 Die 上有多个核心) CPU, 但 Die 与Die 之间通过外部 (系统) 总线连接, 最终封装成多个 CPU Package (有几个 Die 就可以有几个 CPU Package) (成本较低)

    如果还没懂可以参考知乎 多核 CPU 和多个 CPU 有何区别? 的回答

    线程[6]

    • 线程是操作系统能够进行运算调度的最小单位. 大部分情况下, 它被包含在进程中, 是进程中的实际运作单位
    • 同一进程中的多条线程将共享该进程中的全部系统资源, 但同一进程中的多个线程有各自的调用栈 call stack, 自己的寄存器环境 register context,自己的线程本地存储 thread-local storage
    • 一个进程可以有很多线程, 每条线程并行执行不同的任务. 每一个线程都代表一个进程内的一个独立执行上下文
    • 多线程之间切换开销小且通信 (交换资源) 效率较高[7][8]

    进程[9]

    • 进程是操作系统进行资源分配和调度的基本单位, 是执行中的程序, 也是线程的容器
    • 程序本身知识指令, 数据及其组织形式的描述, 进程才是程序 (那些指令和数据) 真正运行的实例 (实体)
    • 若干进程有可能与同一个程序相关系 (执行在不同的数据集上就会成为不同的进程实例), 也即进程与程序是 n:1 的关系
    • 多进程之间切换开销大且通信 (交换资源) 效率较低[7:1][8:1]

    超线程 Hyper-Threading (HT)[10]

    • 核心在运行指令时, 并不能完全利用所有的资源, 为了有效利用这些空闲资源, 干脆再增加一些资源来运行第二个线程, 让闲置的资源可以执行另一个线程. 因此, (增加了资源的) 核心内部可以复制足够两个逻辑线程同时运行的资源. 这样, 一个核心在单位时间内就可以模拟处理两个线程的工作
    • 目的: 提高处理器吞吐量以及线程化软件的整体性能

    多线程[11][12]

    • 是指从软件或者硬件上实现多个线程并发执行的技术. 具有多线程能力的计算机如果硬件支持多线程, 则能够实现多个线程并行执行, 进而提升整体的处理性能

    多进程[13][14]

    • 是指从软件或硬件上实现多个进程并发执行的技术, 具有多核 CPU多 CPU 的计算机能够实现多个进程并行执行

    多线程与多进程[15][16]

    任务可以分为计算密集型和IO密集型,假设我们现在使用一个进程来完成这个任务,对计算密集型任务,可以使用【核心数】个线程,就可以占满cpu资源,进而可以充分利用cpu,如果再多,就会造成额外的开销;对于IO密集型任务(涉及到网络、磁盘IO的任务都是IO密集型任务),线程由于被IO阻塞,如果仍然用【核心数】个线程,cpu是跑不满的,于是可以使用更多个线程来提高cpu使用率

    最后以 多线程与多进程的思考 中的一张图片结尾:
    多线程与多进程


    1. 中央处理器 ↩︎ ↩︎ ↩︎

    2. 图形处理器) ↩︎

    3. 浮点运算器 ↩︎

    4. CPU 芯片 ↩︎

    5. 核心 ↩︎ ↩︎

    6. 线程 ↩︎

    7. 进程切换和线程切换? ↩︎ ↩︎

    8. 线程通信与进程通信的区别 ↩︎ ↩︎

    9. 进程 ↩︎

    10. 超线程 ↩︎

    11. 多线程 ↩︎

    12. 关于多线程编程和CPU多核多线程的关系? - 朱元的回答 ↩︎

    13. Multiprocessing ↩︎

    14. Computer multitasking ↩︎

    15. 多线程,多进程,多核总结 ↩︎

    16. 多线程与多进程的思考 ↩︎

  • 相关阅读:
    JS获取图片的缩略图,并且动态的加载多张图片
    小扬的马【未完成】
    小宇和小曾的字符串 【未完成】
    数据库笔记【转】
    分解质因数
    汉诺塔
    排列组合
    数字字符出现频率
    文章中字符数统计
    是否阶乘之和?
  • 原文地址:https://www.cnblogs.com/ayuuuuuu/p/13518015.html
Copyright © 2011-2022 走看看