Skip to main content

计算机底层原理

1 计算机基础

[1][马士兵仅用30小时就把计算机底层原理、操作系统、数据结](https://www.bilibili.com/video/BV1va411y7Hy)

前言

适度打开计算机底层,因为它的知识量广而深,要抓住当前的主线!

目的

  • 知道计算机如何运行的
  • 过面试这一关

进大厂

最佳时间:3-5年

原因:1.心智成熟 2.熟手

跳槽时机和薪资

时长薪资
干1年9k
干2年16k

进大厂前薪资最好达到20k以上

忘掉学历的前提:1.技术 25k以上 2.团队leader

2 计算机组成

image-20220822225503130

说明:

  • PC(): 存储指令
  • Register(寄存器): 指令中涉及到数据,就会加载到寄存器中
  • ALU(算术逻辑单元): 获取寄存器中的数据,进行运算,并把结果存到内存中

总结CPU,一直取指令,做运算,写结果

缓存

出现原因:CPU太快了,内存太慢了,所以会出现了缓存这个东西

image-20220822230152556

L1、L2、L3

image-20220822231016850

查找过程:CPU会先在L1中查找,找不到,去L2中查找,找不到,去L3查找,找不到,再去内存中查找

区别:L3是多核CPU共享的缓存,L1和L2在每个核中都存在

问:为什么是三级缓存?而不是四级、五级?

工业测试的结果,三级最优

超线程

一个ALU对应两组线程对应的运算

实例:四核八线程,4个ALU拖8个线程

读取缓存

一块一块读取,每一个块叫做 cache line

在interCPU中,每一个 cache line 为64个字节

image-20220822232356457

cache行一致性

interCPU利用MESI实现一致性

指令重排序

cpu乱序执行

image-20220823093628831

阻止乱序执行的方式是加volatile,从JVM层面来看,原理是加内存屏障

问:DCL(double check lock)需要加volatile吗?

3 线程和锁

3.1 进程和线程

进程:是资源分配的基本单位

线程:是程序执行的基本单位

问:线程切换是什么概念?

执行T1,缓存T1,执行T2,恢复T1(恢复现场)

image-20220823150337957

那这里会涉及到一个问题:线程越多越好吗?

不一定,因为线程切换需要时间

问:线程是如何调度的?
问:协程是什么?
问:用户级别线程和操作系统级别线程的区别?

在JVM中,一个用户线程对应一个操作系统线程,也就是1:1

在GO语言中,是M:N的数量关系,类似于JAVA的线程池,但有区别,JAVA线程池无法进行同步

  • M表示GO创建出来的用户线程,通过队列去维护
  • N表示提前创建出来的几个或者几十个系统线程

image-20220823152036723

3.2 锁

名称描述关系
偏向锁注意,偏向锁不是锁出现竞争后,升级为自旋锁
自旋锁同一时刻,只允许一个人上马桶,其他人竞争竞争激烈后,升级为队列锁
队列锁同一时刻,只允许一个人上马桶,其他人排队,通过OS调度

保证数据一致性,锁是一个逻辑概念

同一时刻,只允许一个人上马桶

自旋锁,轻量级锁,适用于线程少,执行时间短

image-20220823153408148

队列锁,重量级锁(需要OS调度),适用于线程多,执行时间长

image-20220823153508038

问:synchronized原理?
问:自旋锁

image-20220823155836218

ABA问题:可以通过版本号解决

CAS(compare and swap)修改值的原子性问题:当判断完相等,但这时被其他线程改动了,怎么办?

用lock指令,锁总线

lock cmpxchg 指令
偏向锁

首先,偏向锁不是锁,它只是一个占位用的

为什么会出现偏向锁呢?因为绝大数都是一个线程在跑,省去了线程竞争的过程。如果出现多个线程,那么就会进行 锁升级

image-20220823162804767

锁升级步骤,偏向锁,如果出现两个以上线程轻度竞争,则升级为轻量级锁(自旋锁),如果重度竞争,则升级为重量级锁(队列锁)

image-20220823163031123

问:一个对象占多少字节?美团

jol 这个库可以打印出对象信息

一个对象占16个字节

image-20220823163604787

对象在内存空间中的布局

64位机器:表示指针长度为64位

架构师

思想:

  • 这个地适合用什么语言就用什么语言
  • 不要让自己局限在某个语言上

述求

我的述求是什么?

扎稳前端,逐步向后端扩展。

[1][MCA架构师课程大纲-马士兵教育](https://ke.qq.com/course/package/20773)

MCA(Microsoft Certified Architect),微软认证构架师的简称,是微软的顶级证书