一步步学习并发:了解并发是如何发生的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一步步学习并发:了解并发是如何发生的相关的知识,希望对你有一定的参考价值。

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

数据库操作的并发问题是没法避免的,并发会引起如下问题:

举例说明:

数据库事务并发带来的问题有:更新丢失、脏读、不可重复读、幻象读。假设张三办了一张招商银行卡,余额100元,分别说明上述情况。
1、更新丢失:一个事务的更新覆盖了另一个事务的更新。事务A:向银行卡存钱100元。事务B:向银行卡存钱200元。A和B同时读到银行卡的余额,分别更新余额,后提交的事务B覆盖了事务A的更新。
更新丢失本质上是写操作的冲突,解决办法是一个一个执行。
2、脏读:一个事务读取了另一个事务未提交的数据。事务A:张三妻子给张三转账100元。事务B:张三查询余额。事务A转账后(还未提交),事务B查询多了100元。事务A由于某种问题,比如超时,
进行回滚。事务B查询到的数据是假数据。脏读本质上是读写操作的冲突,解决办法是写完之后再读。
3、不可重复读:一个事务两次读取同一个数据,两次读取的数据不一致。事务A:张三妻子给张三转账100元。事务B:张三两次查询余额。事务B第一次查询余额,事务A还没有转账,第二次查询余额
,事务A已经转账了,导致一个事务中,两次读取同一个数据,读取的数据不一致。不可重复读本质上是读写操作的冲突,解决办法是读完再写。
4、幻象读:一个事务两次读取一个范围的记录,两次读取的记录数不一致。事务A:张三妻子两次查询张三有几张银行卡。事务B:张三新办一张银行卡。事务A第一次查询银行卡数的时候,张三还没
有新办银行卡,第二次查询银行卡数的时候,张三已经新办了一张银行卡,导致两次读取的银行卡数不一样。幻象读本质上是读写操作的冲突,解决办法是读完再写。

看到上面的列子,想必大家应该知道并发是如何发生的了

其实,究其本质,就是同一时间内,多个不同操作者,操作统一数据时引起并发。

以上是关于一步步学习并发:了解并发是如何发生的的主要内容,如果未能解决你的问题,请参考以下文章

并发与并行的区别

想提高开发效率的必看!从底层开始带你了解并发编程

Java并发-了解线程安全

数据库事务并发了解一下呗

如何一步步提升Go内存缓存性能

偏向锁理论太抽象,实战了解下偏向锁如何发生以及如何升级实战篇