Mysql的innodb同步管理
innodb的同步管理
数据库是支持多客户端同时连接和处理的, 因此多线程是必然的,多线程编码很重要的一个方面是处理同步和互斥,innodb的互斥机制有两个:mutex和rw-lock; 当某个线程需要获取一个mutex或rw-lock时,有两种结果可能发生, 一是直接获得了mutex从而继续处理;一个是无法获得mutex只得等待拥有线程释放mutex. 多线程编码技术中, 是通过信号量来通知等待线程mutex的可用性的, mysql在处理时并没有直接使用操作系统提供的信号量机制, 而是实现了自己的信号量机制,之所以不用操作系统的信号量机制而自己实现的主要原因是操作系统的信号量机制比较慢,其次一个原因是(某些)操作系统的信号量处理往往导致线程切换,而在很多时候, 有比不做线程切换更高效的事情:在多处理器系统上,通过循环等待旋转锁(spin lock), 当然, 在只有单处理器的系统上,循环等待明显是低效的事情。再一个原因是, 便于分析同步情况, 从而避免死锁, 因为当所有的同步信息交给操作系统处理时, 就难以分析死锁情况了,如果有自己的数据结构来管理这些信息, 死锁情况就容易分析。
