Java並發架構——公平性,java並發架構

來源:互聯網
上載者:User

Java並發架構——公平性,java並發架構
所謂公平性指所有線程對臨界資源申請存取權限的成功率都一樣,不會讓某些線程擁有優先權。通過前面的CLH Node FIFO學習知道了等待隊列是一個先進先出的隊列,那麼是否就可以說每條線程擷取鎖時就是公平的呢?關於公平性這裡分拆成三個點分別闡述:
① 準備入隊列的節點,此情況討論的是線程加入等待隊列時產生的競爭是否公平,線程在嘗試擷取鎖失敗後將被加入等待隊列,這時多個線程通過自旋將節點排入佇列,所有線程在自旋過程中是無法保證其公平性的,可能後來的線程比早到的先進入隊列,所以節點入隊列不具公平性。
② 等待隊列中的節點,情況①中成功排入佇列後即成為等待隊列中的節點,我們知道此隊列是一個先入先出隊列,那麼很簡單能得到,隊列中的所有節點是公平的,他們都按照順序等待自己被前驅節點喚醒並擷取鎖,所以等待隊列中的節點具有公平性。
③ 闖入的節點,這種情況是指一個新線程到達共用資源邊界時不管等待隊列中是否存在其他等待節點它都將優先嘗試去擷取鎖,這種稱為可闖入策略。可闖入特性破壞了公平性,AQS架構對外體現的公平性主要由此體現,下面將對闖入特性展開分析。
AQS提供的基礎擷取鎖演算法是一種可闖入的演算法,即如果有新線程到來先進行一次擷取嘗試,不成功的情況下才將當前線程加入等待隊列。2-5-9-6所示,等待隊列中節點線程按照順序一個接一個嘗試去擷取共用資源的使用權,某時刻頭結點線程準備嘗試擷取的同時另外一條線程闖入,此線程並非直接加入等待隊列的尾部,而是先跟頭結點線程競爭擷取資源,闖入線程如果成功擷取共用資源則直接執行,頭結點線程則繼續等待下一次嘗試,如此一來闖入線程成功插隊,後來的線程比早到的線程先執行,說明AQS基礎擷取演算法是不嚴格公平的。
 
圖2-5-9-6 闖入線程
基礎擷取演算法邏輯簡化如下:首先嘗試擷取鎖,假如擷取失敗才建立節點並加入到等待隊列的尾部,接著通過不斷迴圈檢查是否輪到自己執行,當然此過程為了提高效能可能將線程先掛起,最終由前驅節點喚醒。
if(嘗試擷取鎖失敗) {
    建立node
    使用CAS方式把node插入到隊列尾部
    while(true){
    if(嘗試擷取鎖成功 並且 node的前驅節點為前端節點){
把當前節點設定為前端節點
    跳出迴圈
}else{
    使用CAS方式修改node前驅節點的waitStatus標識為signal
    if(修改成功)
        掛起當前線程 
}
}
為什麼要使用闖入策略?可闖入的策略通常可以提供更高的總輸送量。由於一般同步器顆粒度比較小,也可以說共用資源的範圍較小,而線程從阻塞狀態到被喚醒所消耗的時間周期可能是通過共用資源時間周期的幾倍甚至幾十倍,如此一來線程喚醒過程中將存在一個很大的時間周期空窗期,導致資源沒有得到充分利用,為了提高輸送量,引入這種闖入策略,它可以使在等待隊列頭結點從阻塞到被喚醒的時間段內闖入的線程直接擷取鎖並通過同步器,以便充分利用喚醒過程這一空窗期,大大增加了吞吐率。另外,闖入機制的實現對外提供一種競爭調節機制,即開發人員可以在自訂同步器中定義闖入嘗試擷取的次數,假設次數為n則不斷重複擷取直到n次都擷取不成功才把線程加入等待隊列中,隨著次數n的增加可以增大成功闖入的幾率。同時,這種闖入策略可能導致等待隊列中的線程饑餓,因為鎖可能一直被闖入的線程擷取,但由於一般持有同步器的時間很短暫而避免饑餓的發生,反之如果保護的代碼體很長並且持有同步器的時間較長,這將大大增加等待隊列無限等待的風險。
在實際情況中還是要根據使用者需求制定策略,在一個公平性要求很高的情境,則可以把闖入策略去除掉以達到公平。在自訂同步器中可以通過AQS預留方法tryAcquire方法實現,只需判斷當前線程是否為等待隊列中頭結點對應的線程,若不是則直接返回false,嘗試擷取失敗。但前面這種公平性是相對Java文法語義層面上的公平性,在現實中JVM的實現會直接影響線程執行的順序。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.