本文主要是介绍cpu的并发控制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
CPU的并发控制
中断控制
首先要知道中断是指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
而关中断是指在此中断处理完成前,不处理其它中断.
缓存一致性协议
cpu和内存的速度是1 :100,太慢了所以在中间加了一个三级缓存,每次拿数据会在缓存中一层一层的取,如果都没有会在内存中取,但每次不是只拿需要的数据,而是把附近的数据也拿过来,称为缓存行,缓存行大小为64byte。如果两个cpu读的数据在同一个缓存行,一个进行了修改,另一个就要知道,所以就有了一致性协议。具体的一致性协议实现有很多种,这里了解一下MESI,MESI分别对应了缓存行的四种状态,Modify修改,Exclusiv独占,Shared共享,Invalid无效
- 修改(M):
高速缓存行仅存在于当前高速缓存中,并且是脏的 - 它已从主存储器中的值修改(M状态)。在允许对(不再有效)主存储器状态的任何其他读取之前,需要高速缓存在将来的某个时间将数据写回主存储器。回写将该行更改为共享状态(S)。 - 独占(E):
缓存行仅存在于当前缓存中,但是干净 - 它与主内存匹配。它可以随时更改为共享状态,以响应读取请求。或者,可以在写入时将其改变为修改状态。 - 共享(S):
表示此高速缓存行可能存储在计算机的其他高速缓存中并且是干净的 - 它与主存储器匹配。可以随时丢弃该行(更改为无效状态)。 - 无效(I):
这个缓存行无效。
系统屏障
- cpu乱序执行:
为了提升效率,比如一条指令要去内存中获取数据,等待数据返回时就可以处理后边的指令 - 什么情况下会乱序执行:
在as-if-serial语义的影响下,在单线程执行的结果与重排序结果一样的情况下会进行指令重排序 - happen-before:
JMM可以通过happens-before关系向程序员提供跨线程的内存可见性保证(如果A线程的写操作a与B线程的读操作b之间存在happens-before关系,尽管a操作和b操作在不同的线程中执行,但JMM向程序员保证a操作将对b操作可见)。简单来说就是操作1happen-before操作2,那么操作1一定先执行与操作2. - 内存屏障:
有四种分别是:读读,读写,写读,写写
加上内存屏障以后两个指令不能被重排序
总线/缓存锁
就是lock锁,先锁缓存行,如果没有就锁总线
这篇关于cpu的并发控制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!