一图看懂Latch和Lock
数据库系统中,Latch(闩锁)和 Lock(锁)虽然都用于并发控制,但它们的定位和特性截然不同。简单来说,Latch 是保护内存结构的“轻量级短工”,而 Lock 是管理数据访问的“重量级管家”。 Latch(闩锁):内存的快速卫士 Latch 是一种轻量级锁,它的核心任务是保护内存中的共享数据结构(例如缓冲池里的数据页、链表等)。 闪电速度:Latch 的锁定时间极短,必须快进快出。如果持有时间过长,系统性能会急剧下降。 简单粗暴:它通常没有复杂的死锁检测机制,一般依赖应用程序通过合理的加锁顺序来避免死锁。 应用场景:主要用于数据库内部机制,比如 InnoDB 存储引擎在操作缓冲池时,就会用 Latch 来保证线程安全。 Lock(锁):数据的事务管家 Lock 是一种重量级锁,它服务于数据库的事务处理,用于锁定具体的数据库对象(如表、数据页、行)。 事务绑定:Lock 的对象是事务。它通常会持续整个事务过程,直到事务提交(Commit)或回滚(Rollback)后才会释放。 智能管理:系统内置了完善的死锁检测机制(如等待图、超时等),能主动发现并处理死锁问题。 应用场景:用于实现事务的隔离性,确保多个事务并发操作时的数据一致性和完整性。比如我们常见的行锁、表锁,都属于 Lock。