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