【Hystrix權威指南四】Hystrix隔離策略源碼分析二

 
信號隔離    
          TryableSemaphore 接口定義了信號隔離的行爲,內部藉助AtomicInteger類實現資源的分配。HystrixProperty<Integer> numberOfPermits 存儲可分配的資源,AtomicInteger count存儲已分配的資源。numberOfPermits 在類初始化時就需要賦值,所以定義成了final類型。
        protected final HystrixProperty<Integer> numberOfPermits;
        private final AtomicInteger count = new AtomicInteger(0);  
          
申請資源
      tryAcquire()負責資源的分配。有資源申請請求時,對count執行incrementAndGet()操作,如果返回值大於numberOfPermits的值,則進行decrementAndGet進行回退剛纔的加一操作,並返回false,表示申請資源失敗;如果返回值不大於numberOfPermits的值,則表示申請資源成功,返回true。詳見代碼:
@Override
        public boolean tryAcquire() {
            int currentCount = count.incrementAndGet();
            if (currentCount > numberOfPermits.get()) {
                count.decrementAndGet();
                return false;
            } else {
                return true;
            }
        }

釋放資源
    邏輯執行完成後,要進行資源的釋放,以便讓其他線程獲得資源。release()負責資源的釋放。有資源釋放請求時,對count進行decrementAndGet()操作。

     同一個業務不同的資源依賴時,可以選擇信號量隔離,降低線程調度帶來的性能消耗。

到此,信號量資源的申請和釋放講完了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章