面试题答案
一键面试优势
- 理论分析:
- 读操作并发支持:共享锁(S锁)允许多个事务同时获取,用于读取操作。在高并发读取场景下,多个事务可以同时持有共享锁读取数据,不会相互阻塞,大大提高了读操作的并发性能。例如,一个新闻网站的文章浏览页面,大量用户同时读取文章内容,使用共享锁可以让这些读操作并行进行,而不像排他锁那样同一时间只能有一个事务进行读或写操作。
- 锁争用减少:对于只读事务,共享锁避免了不必要的锁争用。因为共享锁之间不互斥,只要没有排他锁存在,读操作就可以并发执行。相比之下,排他锁会阻止其他任何锁的获取,包括共享锁,这在高并发读场景下会严重降低系统的并发能力。
- 实际案例: 假设数据库中有一张商品表,记录了10万条商品信息,并发量为1000个读请求。使用共享锁时,多个读请求可以同时获取共享锁读取商品信息,系统能够在短时间内处理大量读请求。例如,电商平台的商品展示页面,大量用户同时浏览商品详情,共享锁可以保证这些读操作快速响应,系统性能较好。
劣势
- 理论分析:
- 写操作阻塞:共享锁与排他锁互斥。当有写操作(需要排他锁)时,只要有共享锁存在,写操作就会被阻塞,直到所有共享锁释放。这在高并发读场景下,如果突然有写操作需求,会导致写操作长时间等待,降低了写操作的响应速度。例如,电商平台在商品促销时,需要更新商品价格,若此时大量用户在读取商品信息(持有共享锁),则价格更新操作(需要排他锁)会被阻塞。
- 数据一致性问题(在某些情况):虽然共享锁保证了读操作的并发,但在没有其他机制配合时,可能导致数据一致性问题。例如,当一个事务获取共享锁读取数据后,另一个事务获取排他锁修改数据并提交,第一个事务再次读取数据时,可能读到不一致的数据(如果没有合适的并发控制机制,如MVCC等)。
- 实际案例: 仍以上述商品表为例,在高并发读场景下,假设突然需要对部分商品的库存进行更新(写操作)。由于大量读请求持有共享锁,库存更新操作(需要排他锁)会被阻塞,可能导致库存长时间无法更新,影响业务正常进行。比如在限时抢购活动中,库存更新不及时,可能出现超卖等问题。