串行等價化 事務 併發 加鎖 死鎖

        串行等價性,滿足串行等價性的事務,可以讓CPU在不同事務間切換,輪有執行。這樣的當事務中含有需要長時間訪問磁盤的操作時,就可以執行其他事務,提供資源利用率。同時對於短事務可以降低響應時間。

        事務的串行等價性,指事務所含指令交叉執行的結果與串行一個一個執行結果似乎一樣的。

    事務具有串行等價的充分必要條件,如果不同事務訪問的資源有重疊,含有衝突操作時,那麼不同事務訪問資源的順序必須一樣。

        比如: 事務A,先訪問i,再訪問j資源;而事務B,先訪問j,再訪問i資源。訪問還是衝突的(如讀寫衝突、寫寫衝突),那事務A與事務B將不滿足串行等價。這樣就無法實現CPU在不同事務間來回切換執行。

        對於不滿足串行等價的事物,服務器可以通過串行化對象訪問來達到事物的串行等價

        這就好比兩個線程訪問資源是衝突的,那麼我就加鎖強制兩個線程串行的訪問資源。

        不同人編寫的事務不同,訪問的資源不同,CPU如何在這些事務的指令上切換也是隨意的,那麼怎麼能保證這些事務執行的結果是對的呢。

        簡單的做法是加互斥鎖,一個對象一把鎖,一個時刻只有一個人可以訪問、修改該對象,同時直到事務中所有的操作執行完了才一併釋放鎖。這就是兩階段加鎖。

        加鎖必然降低併發,那麼就通過修改鎖,提出了讀鎖、寫鎖分離、層次鎖等概念來減低鎖的粒度、鎖強度從而增強併發。比如一個隊列,在隊列頭部插入,在隊列結尾刪除。如果只有一把鎖,那麼插入和刪除就不能併發執行。如果有兩把鎖將插入和刪除區分開,則會減少衝突,提高併發。

       有加鎖必然就有死鎖的情況出現。那麼死鎖與什麼有關?  串行等價性到底有什麼作用?

        1.  串行等價性讓計算資源可以充分利用,不用一個事務接一個事務的執行。

        2.  但運行調度和切換執行事務操作後如何保證事務的正確性,特別是當不同事務訪問相同資源時,常用方法就是加鎖。

        3. 加鎖就有死鎖情況出現,死鎖與加鎖、解鎖的調用方式有關。比如同時等待多個鎖,同時釋放多個鎖;還是對一個對象加鎖、釋放,然後再一個對象加鎖、釋放;這些方式的不同就會引發死鎖。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章