从 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. 多线程与多进程的思考 ↩︎

posted @ 2020-08-17 15:44  ayuuuuuu  阅读(1350)  评论(1编辑  收藏  举报