有人可以向我解释一下原子操作与原子交易之间的区别吗?在我看来,这两个是相同的。这是正确的吗?
答案 0 :(得分:8)
原子事务的概念在原子事务和原子操作之间很常见,但它们通常与不同的域有关。
原子事务与数据库操作相关联,其中一组操作必须全部完成,否则它们中的任何一个都完成。例如,如果有人预订航班,您既可以获得付款并预订座位,也可以不预订座位。如果任何一方获得成功而另一方也没有成功,那么数据库就会不一致。
另一方面,原子操作通常与多处理或多线程应用程序的低级编程相关,并且与关键部分类似。 例如,如果两个线程都访问并修改同一个变量,则每个线程都会执行以下步骤:
但是在多线程系统中,在第一个进程读取了值但未将其写回之后,可能会发生中断或其他上下文切换。然后,第二个进程(或中断)将读取并修改OLD值,并将其修改后的值写回存储。重新启用第一个进程时,它不知道某些内容可能已更改,因此会将其更改写回原始值。因此,第二个过程对变量所做的操作将会丢失。 如果操作是原子,则保证一旦开始就完成而不会被中断。这通常使用硬件级原语来完成,例如Test-and-Set或Compare-and-Swap。
答案 1 :(得分:3)
在一份声明中: 原子事务是执行所需步骤的最小操作集。 所有这些必需的操作都发生(成功)或原子事务失败。
原子操作通常与事务没有任何共同之处。据我所知,这来自硬件编程,其中一组操作(或一组)碰巧立即得到解决。
答案 2 :(得分:2)
要获得更广泛的图片,您可以查看:
以上引用资源中的一些引用:
关于数据库:
在原子事务中,一系列数据库操作全部 发生,或什么也没发生。原子性保证会阻止更新 数据库只是部分发生,这可能会导致更大 问题比直接拒绝整个系列。换一种说法, 原子性意味着不可分割性和不可约性。
关于编程:
在并发编程中,操作(或一组操作)是 原子的,可线性化的,不可分割的或不可中断的 系统的其余部分即时发生。原子性是一种 保证与并发进程隔离。另外,原子 操作通常具有成功或失败的定义 - 它们也是 成功改变系统的状态,或者没有明显的 效果。
我已经在编程中看到事务这个词更常用于数据库和操作,特别是在内核级编程中。