golang.org/x/time/rate については以下の記事に詳しい。
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回なので)