并发作用:
1. 在交互式应用中,快速响应用户的请求,提高感知响应的时间
2. 充分利用硬件资源,计算资源
3. 简化应用设计
并发坏处:
1. 难于测试
2. 并发应用运行在复杂的环境下,软件不确定性增多
3. 处理同步,通信的问题,增加编程复杂性
4. 并发开销对性能的影响,包括上下文环境切换,同步等
并发需要考虑的三个因素:
1. 任务分解
2. 同步
3. 通信
并发层级:
1. 指令级并发
2. 线程
3. 进程
在一般应用中,主要有应用层级的并发和数据库层级的并发(J2EE)。下面主要讨论数据库层级的并发。
数据库层级的并发的本质问题:
1. 丢失更新
2. 不一致读
根据并发冲突的频率和严重性,并发控制方式主要有两种:
1. 乐观并发控制(冲突检测)
2. 悲观并发控制(冲突避免)
处理并发的主要方式是事物,事物的四个基本原则:ACID。
在悲观并发控制方式下,会出现死锁,即在得到锁的情况下,还需要更多的锁。
死锁控制方式:
1. 死锁出现时,解锁。如设置超市控制
2. 避免死锁,如一个事物只申请一种锁资源,锁未释放时,不申请新的锁