企业应用架构模式学习笔记(并发)
来源:互联网 发布:js将timestamp 编辑:程序博客网 时间:2024/05/16 06:26
第五章:并发
并发——企业应用致命杀手。
事务——简化企业应用开发,控制并发。
离线并发(offline concurrency):多数据库事务中数据操作的并发控制。
并发本质问题:
1、更新丢失(Lost updates):
2、不一致读(inconsistent read)
要在正确性与并发处理能力的灵活性之间寻找平衡。
进程:重量级执行语境,将正在处理的内部数据与外部隔离开。
线程:轻量级活跃执行单元,一个单独进程里可以有多个活跃线程。
注意:线程是共享内存的,可能导致并发问题。
服务器处理模式:
1、只有一个进程,每次处理一个请求。
优点:避免出现并发问题。
缺点:处理能力非常弱。
2、每个请求分配一个独立的进程。
优点:同样可以避免出现并发问题。
缺点:创建进程的开销非常大,严重减低服务器性能。
3、只有一个进程,为每个请求分配一个独立的线程。
优点:大大增加服务器的处理能力。
缺点:可能会出现并发问题,需要较高的技能。
事务:数据库操作执行语境。
1、系统事务:应用程序与数据库之间的事务。
2、业务事务:用户与应用程序之间的事务。
并发问题解决方法:
1、隔离(isolation):划分数据,使得每一片数据都只能被一个执行单元访问。
最佳实践:找到各种创建隔离区的办法,并且保证在每个隔离区里能够完成仅可能多的任务。
注意:隔离只能减小错误发生的机率,但不能完全避免。
2、不变性(immutability):只有在共享数据可以修改的情况下,才会出现并发问题。
并发控制策略:
1、乐观并发控制(乐观锁策略):用于冲突检测,不能避免冲突。
优点:提高系统性能和可用性。
缺点:不能控制并发,当出现并发时很难处理。
2、悲观并发控制(悲观锁策略):用于冲突避免。
优点:可以控制并发。
缺点:严重降低系统性能和可用性。
选择标准:冲突的频率与严重性。
乐观锁通常将冲突检测建立在数据的某种版本标记上,可能是时间戳,也可能是顺序计数器。
读锁与写锁:
1、读锁(read lock):也称共享锁,允许多个人对同一数据加锁,一旦有人获取读锁,其他人便不能获得写锁。
2、写锁(write lock):也称排他锁,一旦有人得到了写锁,其他人便不能获得读锁或写锁。
死锁:
1、现象:两个锁资源互相等待,谁也不能释放。
2、原因:在已经得到锁的情况下希望得到更多的锁(或从读锁升级到写锁)。
3、防治:强制在工作开始的时候就获取所有的锁,之后不允许得到更多的锁。
4、处理:超时控制和检测机制。
超时控制:为每个锁都增加一个超时期限,容易实现,但在没有死锁的情况下可能因为持锁时间过长而失败。
检测机制:难于实现。
事务:
定义:
1、有边界的工作序列,开始和结束都有明确定义。
2、所有相关资源在事务开始和结束时都保持一致。
属性:
1、原子性(Atomicity):动作序列的每个步骤要么全部成功,要么全部回滚。
2、一致性(Consistency):事务开始和结束时,系统资源必须处于一致状态。
3、隔离性(Isolation):一个事务,直道提交之后,其结果才对其他事务可见。
4、持久性(Durability):一个已提交事务的任何结果都必须是永久性的。
长事务:跨越多个请求的事务。
请求事务:请求开始时开启事务,请求结束时提交事务。可以处理最大的吞吐率。
延迟事务:只在修改数据时开启事务。不能控制并发,可能出现不一致读。
锁升级(lock escalation):一个事务锁住了一个表的许多行,数据库无法处理那么多锁,只能将锁升级到锁住整个表。对并发有很大的影响。
隔离级别:
隔离级别 | 脏读 | 不可重复读 | 幻读 |
可串行化(Serializable) | N | N | N |
可重复读(Repeatable Read) | N | N | Y |
读已提交(Read Committed) | N | Y | Y |
读未提交(Read Uncommitted) | Y | Y | Y |
选择事务的隔离级别要在灵活性和正确性之间做出权衡,在错误于性能之间取得折衷!
离线并发控制模式:
1、拆分成多个系统事务。
2、采用长事务。可伸缩性会受到损失。
3、乐观离线锁。在业务事务间使用乐观的并发控制机制。
优点:1、易于编程实现。
2、提供最好的灵活性。
缺点:1、只有在提交事务时才能发现错误。
4、悲观离线锁。
优点:1、尽可能早的发现错误。
缺点:1、难于编程实现。
2、降低系统灵活性。
5、粗粒度锁。以一组对象为单位管理并发。
6、隐含锁。
- 企业应用架构模式学习笔记(并发)
- 企业应用架构模式学习笔记
- 《企业应用架构模式》学习笔记
- 《企业应用架构模式中文版》学习笔记
- 企业应用架构模式学习笔记
- 《企业应用架构模式中文版》学习笔记
- 《企业应用架构模式中文版》学习笔记
- 企业应用架构模式学习笔记(分层)
- 《企业应用架构模式》学习笔记(一)
- 《企业应用架构模式》笔记(3)
- 《企业应用架构模式》笔记(1)
- 《企业应用架构模式》读书笔记1-并发
- 企业应用架构模式学习
- 企业应用架构学习笔记
- 企业应用架构模式笔记(一)
- 企业应用架构模式笔记1
- 企业应用架构模式 (简单笔记)
- 企业应用架构模式
- Spring事务管理
- SHBrowseForFolder
- 如何创建和发布Web Service
- 企业应用架构模式学习笔记(分层)
- winform 窗体定位
- 企业应用架构模式学习笔记(并发)
- 关于父,子窗口的传递参数的试验
- spring声明式事务管理祥述
- Timer 使用的注意事项
- 一波接著一波
- 用C#做一个悬浮窗口
- (hibernate)inverse,cascade详细分析(举例说明)
- Struts2学习(一) 国际化
- 一个不错的技术视频学习网站:http://bbs.langsin.com/index.php?fromuid=58264