GoDasturchi
Allow or Deny: Weighted Requests

Allow or Deny: Weighted Requests

Ruxsat yoki rad: og'irlikga ega so'rovlar

Ba'zi so'rovlar boshqalaridan "qimmatroq" bo'ladi — masalan, katta fayl yuklash bitta token o'rniga 5 tokenni sarflashi kerak bo'lishi mumkin. AllowN — bu g'oyani amalga oshiradigan umumlashtirilgan versiya: Allow() shunchaki AllowN(1)ning maxsus holati bo'lib qoladi.

example.go
func (b *TokenBucket) AllowN(n int) bool {
    if b.tokens < n {
        return false
    }
    b.tokens -= n
    return true
}

Muhim nozik nuqta: tekshirish (b.tokens < n) va kamaytirish (b.tokens -= n) bitta chaqiruv ichida sodir bo'ladi. Agar bu ikkitasini alohida qilsangiz (avval tekshirib, keyin boshqa joyda kamaytirsangiz), Mutexes darsida ko'radigan poyga sharoiti paydo bo'lishi mumkin edi — ikkita so'rov bir vaqtda tekshirib, ikkalasi ham "ruxsat bor" deb o'ylab, savatni manfiyga tushirib yuborishi mumkin.

>_ Exercise

AllowN(n int) bool metodini yozing. Agar tokensda kamida n ta token bo'lsa, ularni sarflab true qaytaring; aks holda hech narsani o'zgartirmasdan false qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

"Tekshir-va-amalga oshir" mantig'i (AllowN) bitta metod chaqiruvi ichida bo'lishi kerak — bu tekshirish va o'zgartirish orasida boshqa kod "kirib qolishi"ning oldini oladi, keyinchalik concurrent kirish paytida juda muhim bo'ladigan xususiyat.

NEXT UP

Per-Key Rate Limiting

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Allow or Deny: Weighted Requests

Ruxsat yoki rad: og'irlikga ega so'rovlar

Ba'zi so'rovlar boshqalaridan "qimmatroq" bo'ladi — masalan, katta fayl yuklash bitta token o'rniga 5 tokenni sarflashi kerak bo'lishi mumkin. AllowN — bu g'oyani amalga oshiradigan umumlashtirilgan versiya: Allow() shunchaki AllowN(1)ning maxsus holati bo'lib qoladi.

example.go
func (b *TokenBucket) AllowN(n int) bool {
    if b.tokens < n {
        return false
    }
    b.tokens -= n
    return true
}

Muhim nozik nuqta: tekshirish (b.tokens < n) va kamaytirish (b.tokens -= n) bitta chaqiruv ichida sodir bo'ladi. Agar bu ikkitasini alohida qilsangiz (avval tekshirib, keyin boshqa joyda kamaytirsangiz), Mutexes darsida ko'radigan poyga sharoiti paydo bo'lishi mumkin edi — ikkita so'rov bir vaqtda tekshirib, ikkalasi ham "ruxsat bor" deb o'ylab, savatni manfiyga tushirib yuborishi mumkin.

>_ Exercise

AllowN(n int) bool metodini yozing. Agar tokensda kamida n ta token bo'lsa, ularni sarflab true qaytaring; aks holda hech narsani o'zgartirmasdan false qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

"Tekshir-va-amalga oshir" mantig'i (AllowN) bitta metod chaqiruvi ichida bo'lishi kerak — bu tekshirish va o'zgartirish orasida boshqa kod "kirib qolishi"ning oldini oladi, keyinchalik concurrent kirish paytida juda muhim bo'ladigan xususiyat.

NEXT UP

Per-Key Rate Limiting