python 各種鎖機制歸納整理


 

 

Q:為什么要用鎖?什么樣的業務場景下需要用鎖?

就拿之前的工單系統來說,當審批方式為角色組審批時,代表該角色組內任意一人審批即可,這時,該角色組內成員的系統上都是可以顯示審批按鈕,如果此時A審批員和B審批員都同時審批了同一工單,有可能會出現不一樣的審批結果,即使審批意見是一致的,多人操作也會增加對數據庫的操作次數,同時也消耗了很大時間成本,用了鎖機制,確保這部分是只一人在操作。

 

Q:你知道MySQL有哪些鎖?

悲觀鎖、樂觀鎖            排它鎖、共享鎖                 行級鎖、表級鎖

 

 

悲觀鎖:對每次訪問數據庫的操作都是抱有悲觀的態度,認為該操作會對數據庫做出修改,所以在訪問數據庫的時候就加了鎖

樂觀鎖:對每次訪問數據庫的操作都抱有樂觀的態度,只有在做出修改的時候才會上鎖

 

排它鎖:也稱為寫鎖,若事務A對數據A上了寫鎖,那么此時只允許事務A對數據A進行讀和寫的操作,不允許數據A再接受其他的鎖,直到排它鎖釋放之后

共享鎖:也稱為讀鎖,若事務A對數據A上了讀鎖,那么此時事務A只能讀取數據A並不能對其修改,也能接受其他事務對數據A的讀鎖

 

 

mysql數據庫引擎:MyISAM 和 InnoDB

MyISAM 采用表級鎖,不支持事務

InnoDB 默認行級鎖,也支持表級鎖

 

行級鎖:如根據主鍵id字段進行查找,並且查找到數據,主鍵字段就產生了行級鎖

表級鎖:根據非主鍵非索引字段進行查找,並且查找到數據,當前查找字段產生表級鎖

 

GIL全局解釋器鎖:GIL相當於互斥鎖,在解釋器層面上限制多線程同時執行,避免爭搶資源,保證同一時間只有一個線程在執行

 

Q:有了GIL全局解釋器鎖,為什么還要線程鎖?

因為cpu是分時分片的  當該協程指定時間內未完成任務時 需要用到線程鎖 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM