亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang模擬令牌桶進行對訪問的限流方式

 更新時間:2021年04月27日 09:43:59   作者:鹿灝楷silves  
這篇文章主要介紹了Golang模擬令牌桶進行對訪問的限流方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

利用channel進行模擬令牌桶對訪問進行限流

func FW(max int,duration time.Duration){
//定義一個channel ,進行初始化
	contain := make(chan bool , max)
	for i := 0 ; i < max ; i ++{
		contain <- true//寫入channel
	}
	go func() {//開啟一個線程
		for {
			contain <- true
			time.Sleep(duration)
		}
	}()
	for <- contain {//如果上一個線程寫入一個true,就會運行這個代碼塊
		fmt.Println("helllo world")
	}
}

補充:golang簡易令牌桶算法實現(xiàn)

基本思路:

定義一個chan,chan大小為需要限制的qps大小,go一個協(xié)程啟動tick,每1000/qps時間在tick中寫入數(shù)值,啟動另一個協(xié)程,讀取chan中的值,如果讀取到chan中有值,則向下層接口發(fā)送請求。

代碼如下:

package main
import (
    "fmt"
    "time"
    "httpclient"
)
var LEN int = 10
func tickStoreCh(arrlen int, ch chan int) {
    len := 1000/arrlen
    fmt.Println(len)
    tickTime := time.NewTicker(time.Duration(len)*time.Millisecond)
    var i int
    for {
        fmt.Println(len)
        i++
        <-tickTime.C
        ch<- i
    }
}
func OrganReq(org string, qps int) {
    ch := make(chan int, qps)
    go tickStoreCh(qps, ch)
    time.Sleep(1000*time.Millisecond)
    for {
        //收客戶請求,發(fā)送http請求給RE
        client := httpclient.NewHttpClient(time.Duration(1000)*time.Millisecond, time.Duration(2000)*time.Millisecond)
        header := make(map[string]string)
        header["Content-Type"] = "application/json;charset=utf-8"
        code, err := client.ResponseCode("http://127.0.0.1:19988", header, "llltest")
        value := <- ch
        fmt.Println(code, value, err, "lenchan:", len(ch))
        //time.Sleep(time.Second)
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go語言中掃描Redis中大量key的示例代碼

    Go語言中掃描Redis中大量key的示例代碼

    在 Redis 中,當(dāng)我們需要遍歷大量的鍵時,直接使用 KEYS 命令會面臨性能瓶頸,尤其是在鍵數(shù)量非常多的情況下,今天,我們將通過兩個示例代碼,詳細講解如何在 Go 語言中使用 SCAN 命令遍歷 Redis 鍵,需要的朋友可以參考下
    2024-08-08
  • Golang 類型轉(zhuǎn)換的實現(xiàn)(斷言、強制、顯式類型)

    Golang 類型轉(zhuǎn)換的實現(xiàn)(斷言、強制、顯式類型)

    將一個值從一種類型轉(zhuǎn)換到另一種類型,便發(fā)生了類型轉(zhuǎn)換,在go可以分為斷言、強制、顯式類型轉(zhuǎn)換,本文就詳細的介紹一下這就幾種轉(zhuǎn)換方式,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Go中的gRPC入門教程詳解

    Go中的gRPC入門教程詳解

    本文詳細講解了Go中的gRPC入門教程,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Golang實現(xiàn)CronJob(定時任務(wù))的方法詳解

    Golang實現(xiàn)CronJob(定時任務(wù))的方法詳解

    這篇文章主要為大家詳細介紹了Golang如何通過一個單 pod 去實現(xiàn)一個常駐服務(wù),去跑定時任務(wù)(CronJob),文中的示例代碼講解詳細,需要的可以參考下
    2023-04-04
  • 詳解go中的引用類型

    詳解go中的引用類型

    這篇文章主要介紹了go中的引用類型,文中給大家提到了值類型和引用類型的區(qū)別,通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Go使用database/sql操作數(shù)據(jù)庫的教程指南

    Go使用database/sql操作數(shù)據(jù)庫的教程指南

    Go?語言中,有一個名為database/sql的標(biāo)準(zhǔn)庫,提供了統(tǒng)一的編程接口,使開發(fā)人員能夠以一種通用的方式與各種關(guān)系型數(shù)據(jù)庫進行交互,本文就來和大家講講它的具體操作吧
    2023-06-06
  • Go語言題解LeetCode561數(shù)組拆分

    Go語言題解LeetCode561數(shù)組拆分

    這篇文章主要為大家介紹了Go語言題解LeetCode561數(shù)組拆分示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Go語言標(biāo)準(zhǔn)庫sync.Once使用場景及性能優(yōu)化詳解

    Go語言標(biāo)準(zhǔn)庫sync.Once使用場景及性能優(yōu)化詳解

    這篇文章主要為大家介紹了Go語言標(biāo)準(zhǔn)庫sync.Once使用場景及性能優(yōu)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Golang實現(xiàn)的聊天程序服務(wù)端和客戶端代碼分享

    Golang實現(xiàn)的聊天程序服務(wù)端和客戶端代碼分享

    這篇文章主要介紹了Golang實現(xiàn)的聊天程序服務(wù)端和客戶端代碼分享,本文先是講解了實現(xiàn)邏輯,然后給出了實現(xiàn)代碼,需要的朋友可以參考下
    2014-10-10
  • Go語言之Goroutine與信道異常處理

    Go語言之Goroutine與信道異常處理

    這篇文章主要給大家介紹得是Go語言Goroutine與信道異常處理,Goroutine 之間通信是通過 channel 通信的,想詳細了解得小伙伴跟小編一起來學(xué)習(xí)下面文章內(nèi)容吧
    2021-10-10

最新評論