python 各類鎖機制概括整理

 

 

Q:爲何要用鎖?什麼樣的業務場景下須要用鎖?mysql

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

 

Q:你知道MySQL有哪些鎖?數據庫

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

 

 

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

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

 

排它鎖:也稱爲寫鎖,若事務A對數據A上了寫鎖,那麼此時只容許事務A對數據A進行讀和寫的操做,不容許數據A再接受其餘的鎖,直到排它鎖釋放以後協程

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

 

 

mysql數據庫引擎:MyISAM 和 InnoDB索引

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

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

 

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

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

 

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

 

Q:有了GIL全局解釋器鎖,爲何還要線程鎖?

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

相關文章
相關標籤/搜索