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是分時分片的 當該協程指定時間內未完成任務時 須要用到線程鎖