<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ### 漏桶算法 漏桶算法思路很簡單,我們把水比作是`請求`,漏桶比作是`系統處理能力極限`,水先進入到漏桶里,漏桶里的水按一定速率流出,當流出的速率小于流入的速率時,由于漏桶容量有限,后續進入的水直接溢出(拒絕請求),以此實現限流。 它的主要目的是控制數據注入到網絡的速率,平滑網絡上的突發流量 ![UTOOLS1588125367290.png](http://yanxuan.nosdn.127.net/970d4327b237eae33816ff44b801f2b8.png) <details> <summary>main.go</summary> ``` package main import ( "fmt" "math" "sync" "time" ) type LeakyBucket struct { rate float64 //固定每秒出水速率 capacity float64 //桶的容量 water float64 //桶中當前水量 lastLeakMs int64 //桶上次漏水時間戳 ms lock sync.Mutex } func (l *LeakyBucket) Allow() bool { l.lock.Lock() defer l.lock.Unlock() now := time.Now().UnixNano() / 1e6 eclipse := float64(now - l.lastLeakMs) * l.rate / 1000 //先執行漏水 l.water = l.water - eclipse //計算剩余水量 l.water = math.Max(0, l.water) //桶干了 l.lastLeakMs = now if (l.water + 1) < l.capacity { // 嘗試加水,并且水還未滿 l.water++ return true } else { // 水滿,拒絕加水 return false } } func (l *LeakyBucket) Set(r, c float64) { l.rate = r l.capacity = c l.water = 0 l.lastLeakMs = time.Now().UnixNano() / 1e6 } func main() { var leak LeakyBucket leak.Set(5,100) for i:=0; i<100000; i++ { if leak.Allow() { fmt.Printf("%+v s,i=%d\n", i/100,i ) }else if i%100==0 { fmt.Printf("%+v s\n", i/100 ) } time.Sleep(1*time.Millisecond) } } ``` </details> <br/> **特點**: - 漏桶具有固定容量,出水速率是固定常量(流出請求) - 如果桶是空的,則不需流出水滴 - 可以以任意速率流入水滴到漏桶(流入請求) - 如果流入水滴超出了桶的容量,則流入的水滴溢出(新請求被拒絕) 漏桶限制的是常量流出速率(即流出速率是一個固定常量值),所以最大的速率就是出水的速率,不能出現突發流量 **缺陷**: 漏桶算法不能夠有效地使用網絡資源。因為漏桶的漏出速率是固定的參數,漏桶算法對于存在突發特性的流量來說缺乏效率
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看