對兩個限流演算法的理解

2021-10-02 22:39:10 字數 809 閱讀 1156

水(請求)先進入到漏桶裡,漏桶以一定的速度出水(介面有響應速率),當水流入速度過大會直接溢位(訪問頻率超過介面響應速率),然後就拒絕請求,可以看出漏桶演算法能強行限制資料的傳輸速率.

個人理解:  桶代表請求的最大數,水代表請求,桶的出口代表響應,桶裡面一直接水,當接水的速度超過出水的速度,並且桶已經接滿水了,這時候繼續進來的水就溢位了.即請求速度超過響應速度且超過最大數時,多餘的請求就直接丟棄.

漏桶演算法對突發性的流量無效,原因在於桶就這麼大!

以下選自網路: 

令牌桶演算法(token bucket)和 leaky bucket 效果一樣但方向相反的演算法,更加容易理解。隨著時間流逝,系統會按恆定1/qps時間間隔(如果qps=100,則間隔是10ms)往桶裡加入token(想象和漏洞漏水相反,有個水龍頭在不斷的加水),如果桶已經滿了就不再加了,新請求來臨時,會各自拿走乙個token,如果沒有token可拿了就阻塞或者拒絕服務.

個人理解:  與漏桶演算法一樣,這裡也有個桶,只不過這裡裝的是令牌,定時往桶裡面增加令牌,如果桶滿則丟棄,每個請求過來拿走桶裡面乙個令牌,如果請求的速度超過令牌產生的速度,則丟棄請求.這種模式可以應對突發性流量,如流量突然增大,則可以通過增加令牌的產生速度來對應.

兩個函式宣告的理解

1 當今計算機啟動時,硬體會去呼叫位址為0的函式,用c語言模擬這個過程,應該如何宣告這個函式?呼叫某個函式,c語言中一般會利用指向函式的指標,即如下形式 void f void 上面的表示式的意思是,f是指向函式的指標,指向的函式的形式是 引數是void型別的,返回值也是void型別的。這個很好理解...

兩個函式宣告的理解

1 當今計算機啟動時,硬體會去呼叫位址為0的函式,用c語言模擬這個過程,應該如何宣告這個函式?呼叫某個函式,c語言中一般會利用指向函式的指標,即如下形式 void f void 上面的表示式的意思是,f是指向函式的指標,指向的函式的形式是 引數是void型別的,返回值也是void型別的。這個很好理解...

兩個排序演算法

然後貼 1 int num 10 2 time t tms 3 srand unsigned int time tms 生成種子 4for int i 0 i 10 i 生成陣列元素為10 的陣列59 1011 氣泡排序 12for int i 0 i 10 1 i 1324 25 1 int nu...