文章 62
浏览 15135
多线程事务伪命题

多线程事务伪命题

背景 最近发现一个有趣的命题,多线程如何保证事务的一致性,简单的说,如何保证多线程情况下,一个线程操作入库逻辑执行失败,其他线程能感知,一起回滚,一起成功 个人看法 再此之前,我是觉得不太现实,为什么呢? 我们先从理论上去推理一下。 我们都知道事务的特性是什么? 这个不难吧?八股文必背内容之一,ACID 必须张口就来: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 那么问题又来了,你觉得如果有多线程事务,那么我们破坏了哪个特性? 多线程事务你也别想的多深奥,你就想,两个不同的用户各自发起了一个下单请求,这个请求对应的后台实现逻辑中是有事务存在的。 这不就是多线程事务吗? 这种场景下你没有想过怎么分别去控制两个用户的事务操作吧? 因为这两个操作之间就是完全隔离的,各自拿着各自的链接玩儿。 所以多个事务之间的最基本的原则是什么? 隔离性 。两个事务操作之间不应该相互干扰。 而多线程事务想要实现的是 A 线程异常了。A,B 线程的事务一起回滚。 事务的特性里面就卡的死死的。所以,多线程事务从理论上就是行不通的。 ....

人民有信仰 民族有希望 国家有力量