1.CPU三级缓存
为什么要用三级缓存?
内存跟不上CPU的发展速度,CPU离内存较远,减少CPU与内存的交互,而且考虑到工艺成本,只做一个L1缓存的话,会比较占空间
速度:寄存器>L1>L2>L3
大小:L3>L2>L1>寄存器
L3被当前CPU所有核共享,L1和L2为内核所独享。。。。一个物理核可以处理2个线程,所以一般逻辑是物理核的2倍。
缓存最小存储单元叫缓存行,为64Byte。
CPU从内存读取数据的过程:
加入内存中有数据X=0,CPU也从L1中取,没有再去L2中取,没有再去L3中取,没有再去内存中取,拿到数据后,复制数据到L3,再复制到L2,再复制到L1,再复制到寄存器,进行运算,所以以后不用每次都去内存中取。
2.空间局部性
CPU好不容易从内存中拿一回数据,所以它要拿跟临近的,连续的数据都要拿过来。
3.时间局部性
缓存中拿到了一个数据,可能不会立马丢掉,有可能接下来一段时间内还会用到(时间不能太长),比如:循环、递归、方法的反复调用。
4.线程的上下文切换
举例说明:CPU执行了2个线程T1和T2,当T1还没有执行完,则先保存T1的执行结果,切换到T2执行。
5.CPU运行的安全级别
r0>r1>r2>r3
r0:内核态,操作系统运行级别
r3:用户态,其他第三方运行级别
jvm创建线程有操作系统创建(PThread 线程库),由用户态切到内核态,所以有两个堆栈,分别在用户空间和内核空间,操作系统执行完还得切回用户态
6.线程模型
KLT:内核线程模型--java,线程由内核调度
ULT:用户线程模型--使用比较少,线程创建都是自己做的