首页 > 数据库技术 > 详细

数据库引擎开发 笔记 2017

时间:2020-02-28 23:41:36      阅读:83      评论:0      收藏:0      [点我收藏+]

第3课:阀锁,配置,日志等

  • 和普通数据库的“锁”有严格的区别
    • 关系型数据库中的记录锁一般在数据库代码中实现
    • 系统锁很多在操作系统内核,结合硬件实现
  • 锁的类型
    • 自旋锁SpinLock
    • 信号量Semaphore
    • 互斥量Mutex

CPU缓存

  • 缓存散列机制
  • Cache miss
  • Capacity miss
  • Associaativity miss
  • Write miss
  • Communication miss
  • MESI
    • Modified
      • 该数据保证不会再其他CPU的缓存中出现
    • Exclusive
      • 该数据保证不会再其他CPU的缓存中出现
      • 没有被当前CPU更改
    • Shared
      • 被至少另一个CPU所共享
    • Invalid
      • 可以被占用
  • MESI消息
    • Read:包含该缓存需要读取数据的物理地址
    • Read Response:包含read请求地址对应的数据。数据来源可能是主内存或者另一个CPU
    • Invalidate:无效化指令,通知其他CPU无效化一个物理地址
    • Invalidate Acknowledge:无效化确认。当一个CPU无效化地址后,会发送 无效化确认消息
    • Read Invalidate:读无效化指令,读取并无效化指定的内存地址,为Read与Invalidate的整合,发送的CPU需要等待Read Response与Invalidate Acknowledge消息
    • Writeback:写入消息,将缓存中的数据写入主内存,同时允许modified状态的数据从缓存中弹出

内存栅Memory Barrier
smp_mb();

不同cpu实现

  • AMD64
    • mfence,lfence,sfence
  • IA64
    • mf
  • POWERPC
    • sync,lwsync,eieio,isync
  • x86
    • lock;addl

自旋锁

  • SpinLock

    线程中为了得到某个锁而不停地处于循环中,反复检测一个锁是否空闲

  • 在短缩的场景中可以避免不必要的线程切换
  • 长锁的场景中会浪费不必要的CPU资源

信号量

  • Semaphore

    提供了一个抽象数据类型的计数器

  • Wait: 计数器减一,如果计数器为负,则wait操作所在线程移入等待队列
  • Signal: 计数器加一,如果增加前的数值为负,则将被阻塞线程移入执行队列
  • 一般使用进程队列

互斥量

  • Mutex (Mutual Exclusion)
  • 不允许两个进程或线程同时访问临界区
  • 临界区意味着进程或线程访问共享资源的期间
  • Linux:pthread_mutex*
  • 实现机制在不同平台各异
    • 以Linux举例,pthread_mutex_lock调用Futex(Fast Userspace mutex).Futex 使用底层CPU指令调用实现基本的原子操作。如果无需等待则不进行上下文切换而直接返回,否则将线程置于等待队列。
  • 互斥锁
    - pthread_mutex_lock
    - pthread_mutex_unlock
    - pthread_mutex_trylock
  • 共享锁
    - pthread_rwlock_rdlock
    - pthread_rwlock_tryrdlock
    - pthread_rwlock_wrlock
    - pthread_rwlock_trywrlock
    - pthread_rwlock_unlock
    - 注:pthread_rwlock不支持递归读写操作,也就是说一个线程写锁喉,放锁前请求锁则会出现未知行为

条件变量(Condition Variable)

  • 利用线程间共享的全局变量进行同步的一种机制
    • 线程等待
    • 线程唤醒
    • 总是和一个互斥锁结合使用
  • POSIX
    • pthread_cond_wait
    • pthread_cond_timedwait
    • pthread_cond_signal
    • pthread_cond_broadcast

第三课 第三部分

数据库引擎开发 笔记 2017

原文:https://www.cnblogs.com/my-flash/p/12380327.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!