【架构笔记】基础篇01 CPU运行基本原理

笔记概要

  1. 什么是CPU?
  2. 为什么会出现系统不兼容现象?
  3. CPU的运算依赖于什么?
  4. 存储体系有哪几大模块?
  5. 存储体系在设计系统与开发系统时的重要性。
  6. 缓存Cache,缓冲Buffer的区别是什么?
  7. 在实际项目中,缓存和缓冲是怎么使用的?
 

什么是CPU?

    CPU又称中央处理器,英文全称为:Central Processing Unit 也可以称为Central Processor 或者Main Processor。
    普通程序员绝大多数都是对CPU编程,即计算机的可编程性主要是指对中央处理器的编程。
    中央处理器广义上可以指代一系列可以执行复杂的计算机程序的逻辑机器,在小说三体中有这样一个桥段---冯•诺伊曼要求秦始皇派出三个士兵进行举白旗或者举黑旗的逻辑判断示例,其指代的就是中央处理器。
    值得注意的是 每一个3个”士兵“在同一时刻只能响应一个命令,所谓的CPU响应快只是因为同时存在很多组这样的”士兵“,并且每一组所运算的速度十分快速。
    所谓的真多线程,指的就是有并行的多行”士兵“排列成多行来执行多个任务。
    所谓的虚拟多线程,指得就是跳跃式的使用一组“士兵”,A任务只使用单数编号的士兵,B任务只使用双数编号的士兵,这样就实现了虚拟多线程。
    CPU中的MCU只能一段一段的去读取内存,比如每次读取4字节或者8字节。
    在架构设计中,没有一招鲜吃遍天,在A公司运行正常的架构(4字节一读的MCU)可能在B公司(8字节一读的MCU)会产生各种数据问题。
    解码:CPU从存储器提取指令,需要被解码才能成为有意义的片段,根据不同的CPU指令集会变成对应的指令,一部分为运算码,其他是必要信息或者是寄存器/存储器地址,以地址模式决定。
    执行:根据不同指令与对应的其他信息,来进行简单的运算与逻辑运算,如加法/位操作。
    CPU只会与,或,非,异或。
    回写:CPU只负责计算,所以计算完之后会先回写/写回到缓冲区,然后再同步给主存。
    .NET只是根据它对CPU指令集的理解的封装。
 

为什么会出现不同系统不兼容的情况?

     X64的名字全名是X86-64,是X86指令集的64位扩展。
    由于每一个系统的API都是不同的,普通开发编写的程序都是在Kernal之上的,所以开发可以成为面向系统API编程,系统API不兼容所以不同系统之间无法兼容,甚至于每个系统的策略都不同,如WIN7不允许进行MAC层编程,Linux可以导致工控软件不会存在Windows系统。
 

存储体系的几大模块

    寄存器,第一级高速缓存,第二级高速缓存,第三级高速缓存,主存,外存。
    做.Net可以拿到第一级到第三级高速缓存。
    由于CPU运行过于快速,直接存储在主存是根本来不及的,所以才需要引入第一到第三级高速缓存,第一级高速缓存最小,第三级高速缓存相对第一级会更大。

存储体系在设计系统与开发系统时的重要性

    软件增加缓存的设计核心原理就是从硬件存储体系来的。
    核心就是速度不一致,才会增加缓存。
    容易丢失的都可以称为缓存,断电丢失一定是缓存。

缓存Cache和缓冲Buffer的区别

     缓存和缓冲区别就是是否复用。
    举个例子:
    学霸上完课缓存了知识点,学渣上课缓冲了知识点下课就丢失了,所以导致考试成绩的区分。
    缓冲和缓存是一个概念上的区分。

实际中缓存与缓冲的使用

    在并发量大的环境下,给本地添加缓存,在slb转发的时候定点转发,可以有效减轻redis的压力。
    N层缓冲,即将一系列缓冲池弄成环,在一圈缓冲用完时直接覆盖最早的缓冲池,解决网络中的速度不一致问题。
    播放时候用缓冲,服务端使用用缓存。
    缓冲使用结构体,缓存使用类。
    tcp接收数据放缓冲区,缓冲区不能有业务,也不能长时间占据,所以只能放缓存存着,然后缓存内收完业务数据结果后,进行业务处理。
原文地址:https://www.cnblogs.com/nontracey/p/12884413.html