參考:https://mp.weixin.qq.com/s/R3yuitWpHHGWxsUcE0qIRQ
併發控制
- 常見的併發控制手段有:鎖、數據多版本
鎖
-
普通鎖:操作數據前鎖定數據,操作完釋放,保持一致性
- 但是簡單鎖太粗暴,讀也無法並行
-
共享鎖:s鎖,讀取數據時使用。共享鎖之間不互斥,可以讀讀並行
-
排他鎖:x鎖,修改數據時添加。寫讀、寫寫不能並行。類似於:寫事務沒有提交,讀相關數據的select也會被阻塞
- 如果想在寫人物完成前讀人物依然能執行,則可以使用數據多版本
數據多版本
- 在寫任務發生時複製一份,版本號區分,操作複製出來的這份。其他的讀可以繼續讀以前的數據(類似於java中CopyOnWriteArraySet)
總結
- 整個演進過程:從單鎖的讀寫阻塞,到共享鎖和排他鎖的讀讀並行,最後到多版本的讀寫並行