Semaphore Exchanger 原理總結

2021-08-23 12:16:46 字數 435 閱讀 1301

概念:用來控制併發執行緒數,好比當前道路只能容納100輛車,未到達100的時候,就可以進去,到了100的話,就進不去了,除非進去的車再出去,那麼後面的才可以繼續進入。這裡面車相當於執行緒,出去的車相當於執行緒執行完畢,看見紅燈的車相當於阻塞佇列中的任務,在道路裡面的車相當於正在執行的執行緒。

基於底層的原理:

aqs(abstractqueuedsynchronizer)實現執行緒的管理。semaphore有兩個建構函式,引數permits表示許可數,它最後傳遞給了aqs的state值。執行緒在執行時首先獲取許可,如果成功,許可數就減1,執行緒執行,當執行緒執行結束就釋放許可,許可數就加1。如果許可數為0,則獲取失敗,執行緒位於aqs的等待佇列中,它會被其它釋放許可的執行緒喚醒。

這裡修改許可數都是通過cas進行交換。

說白了就是兩個執行緒到了乙個同步點才能互相交換資料。

elasticsearch內部原理自我總結

elasticsearch 5.5 對於elasticsearch我自己也是新手,只是想做點筆記,記錄下自己的理解。我一直想明白當乙個文件被索引進elasticsearch時,其內部幹什麼了?本人結合網上的教程,記錄下 乙個新文件要使其可見,需要使用倒排索引,其長相如下 詞項文件1 文件2文件3 中...

Atitit 邊緣檢測原理attilax總結

atitit 邊緣檢測 原理attilax總結 1.邊緣檢測的概念 11.1.邊緣檢測的用途 12.邊緣檢測方法分類 13.邊緣檢測的基本方法 23.1.roberts邊緣檢測運算元 23.2.rewitt邊緣檢測運算元 23.3.sobel邊緣檢測運算元 較為常用 24.canny邊緣檢測 最常用...

編譯鏈結原理 總述 編譯階段 鏈結階段 執行原理

在平常的應用程式開發過程中,我們很少需要關注編譯和鏈結的過程,因為通常都是在整合的開發環境下執行,因此一般編譯和鏈結都是一步完成,通常將這種編譯和連線合併到一起的過程稱為構建。這樣雖然簡便,但是在這整個過程中,有時出現問題時,我們只能看到問題的表現,而很難看清本質性問題,所以對於這些一步完成的操作背...