@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Go: golang.org/x/time/rate の burst について

golang.org/x/time/rate については以下の記事に詳しい。

blog.lufia.org

NewLimiter の第二引数の burst 値について調べたメモ。

burst は「一度に消費できるトークン数の最大値」。「貯められるトークンの最大値」と考えても良いが、やや不正確(「溜まっているトークンは一度に全部利用する」という前提を踏まえれば真)

rate=10/sec, burst=1

https://play.golang.org/p/pFDkrz8MX63

  • トークンは一度に1個消費できる
    • ≒トークンは最大1まで貯められる
  • 起動直後にトークンを1消費する(000 2009-11-10 23:00:00 +0000 UTC m=+0.000000001)
  • 以後0.1秒毎にトークンが1貯まる
  • 50回処理し終わるまでに4.9秒かかる
    • (起動直後に1消費して残り49回、0.1秒で1回なので*49で4.9秒)

rate=10/sec, burst=10

https://play.golang.org/p/hSaoHpVx8AO

  • トークンは一度に10個消費できる
    • ≒トークンは最大10まで貯められる
  • 起動直後にトークンを10消費する(000 ~ 009 2009-11-10 23:00:00 +0000 UTC m=+0.000000001)
  • 以後0.1秒毎にトークンが1貯まる
  • 50回処理し終わるまでに4秒かかる
    • (起動直後に10消費して残り40回、0.1秒で1回なので*40で4.0秒)

rate=10/sec, burst=100

https://play.golang.org/p/aYpZQqOp8cM

  • トークンは一度に100個消費できる
    • ≒トークンは最大100まで貯められる
  • 起動直後にトークンを50消費する(000 ~ 049 2009-11-10 23:00:00 +0000 UTC m=+0.000000001)
  • 50回処理し終わるまでに0秒かかる
    • (起動直後に50消費して残り0回なので)