美文网首页
并发问题处理方式

并发问题处理方式

作者: today0507 | 来源:发表于2018-10-23 19:16 被阅读22次

如何处理并发和同步?

  主要是通过锁机制。

悲观锁:指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度.虽然这样保证了线程安全的问题,但是,如果是在“高并发”的场景中。也就是说,会很多这样的修改请求,每个请求都需要等待“锁”,某些线程可能永远都没有机会抢到这个“锁”,这种请求就会死在那里。同时,这种请求会很多,瞬间增大系统的平均响应时间,结果是可用连接数被耗尽,系统陷入异常。

乐观锁:相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。

如一个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行修改时(如更改用户帐户余额),如果采用悲观锁机制,也就意味着整个操作过程中(从操作员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操作员中途去煮咖啡的时间),数据库记录始终处于加锁状态,可以想见,如果面对几百上千个并发,这样的情况将导致怎样的后果。
乐观锁机制在一定程度上解决了这个问题。
乐观锁,大多是基于数据版本Version记录机制实现。数据版本,为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是给数据库表增加一个 “version” 字段来实现。

假设数据库中帐户信息表中有一个 version 字段,当前值为 1 ;而当前帐户余额字段( balance )为 100 。- 操作员 A 此时将其读出( version=1 ),并从其帐户余额中扣除50( 100-50 )。

  • 在操作员 A 操作的过程中,操作员 B 也读入此用户信息( version=1 ),并 从其帐户余额中扣除 20 (100-$20 )。
  • 操作员 A 完成了修改工作,将数据版本号加一(version=2),连同帐户扣除后余额(balance=$50),提交至数据库更新,此时由于提交数据版本大于数据库记录当前版本,数据被更新,数据库记录 version 更新为 2 。
  • 操作员 B 完成了操作,也将版本号加一(version=2)试图向数据库提交数据(balance=$80),但此时比对数据库记录版本时发现,操作员 B提交的数据版本号为2,数据库记录当前版本也为2,不满足“交版本必须大于记录当前版本才能执行更新 “的乐观锁策略,因此,操作员B的提交被驳回。这样,就避免了操作员 B 用基于version=1 的旧数据修改的结果覆盖操作 员 A 的操作结果的可能。 从上面的例子可以看出,乐观锁机制避免了长事务中的数据库加锁开销(操作员A和操作员B操作过程中,都没有对数据库数据加锁),大大提升了大并发量下的系统整体性能表现。

脏数据
  脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据(Dirty Data),依据脏数据所做的操作可能是不正确的。 `
事务
  在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

相关文章

  • 并发问题处理方式

    如何处理并发和同步?   主要是通过锁机制。 悲观锁:指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系...

  • 高并发和多线程理解

    随着IT的发展,传统的技术处理方式面临瓶颈,大数据时代,我们经常面临高并发和多线程的问题,高并发和多线程两者有什...

  • 高并发与多线程

    高并发≠多线程,高并发是指系统短时间内遇到大量操作请求的情况,而多线程是指一种处理方式。 1. 实现高并发需要考虑...

  • PostgreSQL并发处理方式——MVCC

    PostgreSQL的特色之一是它的并发控制机制,在维护一致性和完整性的同时,尽量避免读写的堵塞。 对于传统数据库...

  • 缓慢变化维 - 理论与实践

    介绍 概念 应用场景 处理方式 使用 存在的问题 实践应用 基础数据 处理方式a 处理方式b 优劣对比 总结 介绍...

  • 从sync.map看并发问题 2022-05-24

    1.一般意义下的并发问题 并发读写的问题,其实都出在写上。并发读一点问题都没有 并发读写2大问题如果写是更新操作,...

  • 分布式环境下,怎么保证线程安全

    转载来源:探索并发编程(七)------分布式环境中并发问题 避免并发 在分布式环境中,如果存在并发问题,那么很难...

  • 高并发与缓存

    本文主要讲述高并发下缓存会出现的问题。 在高并发下,缓存会出现的问题有:缓存一致性、并发问题、穿透问题、缓存的雪崩...

  • JVM对并发分配内存处理方式

    内存分配部分 为对象分配内存的基本方法:指针碰撞法、空闲列表法 内存分配并发问题的解决:CAS、TLAB JVM对...

  • Java并发问题

    并发问题 Java并发问题就是多个线程共享资源引起的问题;举个例子,两个线程同时修改一个对象的值,就会出现并发问题...

网友评论

      本文标题:并发问题处理方式

      本文链接:https://www.haomeiwen.com/subject/jroazftx.html