原子性与内存模型与无序执行



我知道atomic operation意味着从所有其他线程的角度来看似乎是即时的操作。因此,当更新一个值时,所有线程都会看到相同的更改。

memory models(弱、强和顺序一致(的世界中,它似乎也在处理指令执行的顺序。因此,一条指令可能在前一条指令之前运行。

我们还有CCD_ 3的概念。当CPU管道空闲时,它可以无序地获取指令,执行它并存储结果,直到实际执行该指令为止。

这些概念在我看来都是一样的,它们指的是同一件事吗?

以下是一个非常简单和非正式的描述,技术水平不高。这只是为了给人们一些关于这个过程的一般直觉。

因此,一条指令可能在前一条指令之前运行。

根据你的意思,这可能是真的,也可能是假的。但显然,程序的运行永远不会像它们的汇编指令的顺序被随机打乱一样。

无序执行是指有时程序顺序中较晚的指令不需要启动较早计算机的结果,与顺序相比可以提前启动。

无序执行可能会提前在内存中获取数据,并在顺序执行时间最终到来时将其视为过去的数据。CPU可以(也可以不(监视预先读取的值的存储器中的这些变化,并丢弃预先完成的这些计算的结果。

CPU总是可以在没有正当理由的情况下提前推测性地(不确定是否真的会执行这样的访问(读取内存,因为CPU可以隐藏由这样的访问导致的任何内存故障,所以如果程序采用不执行这些读取的执行路径,则其结果将被丢弃,包括任何内存访问违规。

编译器通常不能执行这些具有内存访问的转换,而程序在未来可能会执行或不会执行这些转换,因为:

  1. 它们可能会导致内存访问违规,从而用信号中断程序
  2. 在需要该值时,可以对其进行修改

(关于2。该语言可以允许编译器知道哪个内存引用别名与另一个别名,从而限制哪些对象可以通过写入进行修改。(

CPU可以不预先执行存储器修改,直到该写入的执行在程序执行中是确定的。

最新更新