避免并发
隔离性和不变性
1、隔离
划分数据,使得每一片数据只能被一个执行单元访问。
隔离是一种减少错误发生的有效技术。可以使用隔离方法安排资源,以便程序进入的是隔离区,而无需考虑并发问题。
好的并发设计应该是:找个各种创建隔离区的方法,并且保证每个隔离区里能够完成尽可能多的任务。
2、不变性
只有共享数据可以修改的情况下,才会出现并发问题。所以,一个避免并发冲突的方法是识别哪些是不变的数据。
通过定义某些不变的数据,或者至少是几乎总不变的,就可以不用考虑这些数据的并发。
并发处理
乐观锁和悲观锁
1、乐观锁
使用版本号,时间戳等,在提交数据时进行比对,来检测冲突,它其实不是锁,只是一种冲突检测策略。
2、悲观锁
同一个时间段,只能有一个执行单元来修改数据,其他执行单元必须等待它执行完才能获取数据。它是一种冲突避免策略。
3、选择使用哪一种锁?
选择标准是:冲突的频繁性和严重性。如果冲突很少,或者后果不是很严重,那么通常情况下选择乐观锁策略。
如果冲突的结果对用户来说是痛苦的,那么就要使用悲观锁策略。