同步异步

转载 2016年05月31日 13:18:54
问:对同一条数据,两人同时进行修改操作,第一个人先进去修改,然后,第二人个又进去修改,第一个人改完后提交,第二人也修改完提交,其中第一个人比第二个人速度快,这样就造成,二个人修改前读取的数据是一样的,而第二人个修改的数据,覆盖了第一个人修改的内容,造成第一人的工作白做了。


回答:
乐观锁机制:在表中增加一个字段,版本号或时间戳,当第一个人准备修改数据前,先查出这条数据的版本号或时间戳,前执行修改时,再去库中查出版本号或时间戳是否与之前一至。如果不一至,提示用户数据已被改变;如果一至可进行修改,修改时,更新库中的版本号(增加版本号)或时间戳(最后修改时间)。


http://blog.csdn.net/truong/article/details/8929438
http://www.cnblogs.com/LIANQQ/p/4660252.html


http://blog.csdn.net/cqkxboy168/article/details/9026205/
http://www.cnblogs.com/xiohao/p/4385508.html
http://blog.csdn.net/ning109314/article/details/10154321
http://dapple.iteye.com/blog/787563


悲观锁(Pessimistic Lock):
每次拿数据的时候都会担心会被别人修改(疑心重很悲观),所以每次在拿数据的时候都会上锁。确保自己使用的过程中不会被别人访问,自己使用完后再解锁。
期间需要访问该数据的都会等待。


乐观锁(Optimistic Lock):
每次拿数据的时候都完全不担心会被别人修改(心态好很乐观),所以每次在拿数据的时候都不会上锁。但是在更新数据的时候去判断该期间是否被别人修改过(使用版本号等机制),期间该数据可以随便被其他人读取。


两种锁各有优缺点,不能单纯的定义哪个好于哪个。乐观锁比较适合数据修改比较少,读取比较频繁的场景,即使出现了少量的冲突,这样也省去了大量的锁的开销,故而提高了系统的吞吐量。但是如果经常发生冲突(写数据比较多的情况下),上层应用不不断的retry,这样反而降低了性能,对于这种情况使用悲观锁就更合适。

同步异步阻塞非阻塞

  • 2015年04月29日 10:12
  • 380KB
  • 下载

程序同步与异步的区别

  • 2016年11月27日 10:42
  • 237KB
  • 下载

C# Socket编程 同步以及异步通信

套接字简介:套接字最早是Unix的,window是借鉴过来的。TCP/IP协议族提供三种套接字:流式、数据报式、原始套接字。其中原始套接字允许对底层协议直接访问,一般用于检验新协议或者新设备问题,很少...

JAVA IO同步,异步

  • 2014年08月26日 13:48
  • 264KB
  • 下载

同步异步复位与亚稳态

  • 2014年04月26日 01:03
  • 196KB
  • 下载

Ajax之同步请求和异步请求的区别

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的。信息错误又要重新填写! 异步是指:发送...

同步异步阻塞非阻塞I/O思维导图

  • 2012年11月05日 21:34
  • 355KB
  • 下载

【网络编程】半同步--半异步线程池源码分析之任务队列(基于C++11)

前言对于C++的学习,感觉如果只看书,学习效率很低。很多新知识新概念理解起来都很困难,而C++11更是引入了更多新的概念和知识。而在学习服务端这部分,什么“同步–异步”也把人搞得很晕 如果看不懂...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:同步异步
举报原因:
原因补充:

(最多只允许输入30个字)