Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kadar golang? Penjelasan terperinci tentang penggunaan kadar

Apakah kadar golang? Penjelasan terperinci tentang penggunaan kadar

PHPz
PHPzasal
2023-04-11 09:14:07924semak imbas

Bahasa Go ialah bahasa pengaturcaraan yang cekap, serentak dan peringkat sistem. Pakej Kadar ialah pakej yang sangat berguna dalam bahasa Go yang membolehkan anda mengawal kadar pelbagai operasi. Dalam artikel ini, kami akan memperkenalkan penggunaan pakej Rate untuk membantu anda menguasai penggunaannya dengan lebih baik.

1. Gambaran keseluruhan pakej Rate

Pakej kadar ialah pakej dalam pustaka standard bahasa Go. Ia menyediakan kaedah untuk melaksanakan operasi tertentu pada kadar tetap. Sebagai contoh, kita boleh menggunakan pakej ini untuk mengehadkan kadar permintaan API, mengawal kadar operasi tertentu dilakukan dan sebagainya.

Pakej ini menyediakan dua kaedah pengehad kadar biasa: mengehadkan kadar operasi tertentu dilakukan sesaat atau kadar operasi tertentu dilakukan setiap unit masa. Kedua-dua kaedah sekatan ini boleh ditetapkan secara manual secara bebas menggunakan masa. Jenis tempoh bahasa pergi untuk memenuhi keperluan masing-masing.

2. Penggunaan asas

1. Operasi asas

Pakej kadar menyediakan dua operasi: Allow() dan Limit(). Bentuk asas algoritma baldi token ditakrifkan dalam kaedah Allow(). Iaitu, berapa banyak token dalam baldi token, maka operasi yang ditentukan boleh dibenarkan. Limit() mengembalikan dua nilai yang mengandungi token terpakai dan tersedia.

2. Lakukan operasi tertentu pada kadar tetap

Jika kita perlu melakukan operasi tertentu pada kadar tetap untuk setiap operasi, pakej Kadar menyediakan pengehad: contoh yang mengehadkan pelaksanaan operasi pada antara muka API kadar tertentu. Contohnya:

func main() {
    rate := rate.NewLimiter(10, 1)
    for i := 1; i <= 50; i++ {
        if rate.Allow() == false {
            fmt.Println("No allowance for", i)
            continue
        }
        fmt.Println("Hello", i)
    }
}

Dalam kod di atas, kami mencipta kadar tika yang akan melaksanakan operasi dengan had kadar 10 operasi sesaat. Kemudian kami gelung dan melakukan operasi 50 kali. Jika operasi tidak dibenarkan, operasi semasa dilangkau. Jika tidak, ia melaksanakan dan mencetak Hello bersama-sama dengan bilangan operasi.

3 Hadkan pelaksanaan operasi dalam tempoh masa

Selain mengehadkan operasi pada kadar operasi tetap sesaat, pakej Kadar juga menyediakan kaedah: untuk mengehadkan operasi dalam tempoh tertentu had nombor masa. Contohnya:

func main() {
    limit := rate.NewLimiter(1, 1)
    duration := time.Minute
    operations := 10
    
    timeStart := time.Now()

    for i := 0; i < operations; i++ {
        if err := limit.Wait(ctx); err != nil {
            log.Fatalf("Error waiting on limiter: %v", err)
        }
        // Execute operation
    }

    timeEnd := time.Now()

    elapsedTime := timeEnd.Sub(timeStart)

    fmt.Printf("Executed %v operations in %v", operations, elapsedTime)
}

Dalam kod ini, kami mencipta contoh had operasi dan mengehadkan bilangan operasi kepada 1 seminit. Contoh operasi menunggu isyarat bahawa operasi boleh dilakukan, dan kemudian melaksanakan operasi. Kami juga boleh menetapkan masa had kepada nilai lain menggunakan fungsi WithTimeout parameter ctx.

4. Lakukan operasi dalam mod pecah

Apabila kita perlu melakukan operasi dalam mod pecah, kita boleh menggunakan contoh Baldi untuk melakukannya. Contoh baldi adalah serupa dengan tika Limiter, tetapi ia mempunyai ambang kawalan letusan yang lebih tinggi.

Contohnya:

func main() {
        b := rate.NewBucket(time.Second*1, 50)
        t := time.Now()
        for i := 0; i < 110; i++ {
                t = b.Take(1)
                fmt.Printf("i: %v t: %v\n", i, t.UnixNano())
        }
}

Dalam kod di atas, kami mencipta tika Baldi yang menjalankan operasi dengan had kadar 1 saat setiap 50 operasi. Kemudian kita gelungkan operasi 110 kali. Memandangkan ambang kawalan pecah ialah 50, 50 operasi pertama akan dapat dilaksanakan dengan serta-merta. Tetapi tunggu masa berjalan operasi berikutnya untuk memastikan tetingkap pecah tidak lebih daripada 50 operasi.

Ringkasan

Kami telah menguasai penggunaan asas pakej Kadar dan menggunakan contoh di atas untuk menunjukkan cara melaksanakan operasi pada kadar tetap, setiap tempoh masa dan dalam mod pecah. Selain itu, pakej menyediakan beberapa kaedah berguna lain (seperti SetLimit() dan LimitAt()) yang boleh membantu anda mengawal kadar operasi dengan lebih baik. Hargai kehidupan dan jauhi risiko larangan akaun yang kerap.

Atas ialah kandungan terperinci Apakah kadar golang? Penjelasan terperinci tentang penggunaan kadar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Cara melaksanakan orm di golangArtikel seterusnya:Cara melaksanakan orm di golang