zoukankan      html  css  js  c++  java
  • go语言从例子开始之Example34.速率限制

    速率限制(英) 是一个重要的控制服务资源利用和质量的途径。Go 通过 Go 协程、通道和打点器优美的支持了速率限制。

    Example:

    package main
    import "fmt"
    import "time"
    
    
    
    func main() {
    
        //首先我们将看一下基本的速率限制。
        //假设我们想限制我们接收请求的处理,我们将这些请求发送给一个相同的通道。
        requests := make(chan int, 5)
        for i:=1; i<=5; i++{
            requests <- i
        }
        close(requests)
    
        //这个 limiter 通道将每 200ms 接收一个值。
        //这个是速率限制任务中的管理器。
        limter := time.Tick(time.Millisecond * 200)
    
        //通过<- limter在每次请求前阻塞 limiter 通道的一个接收
        //我们限制自己每 200ms 执行一次请求。
        for j:=1; j<=5; j++{
            <- limter
            fmt.Println("request", j, time.Now())
        }
    
    }

    Result:

    $ go run example.go
    request 1 2019-10-30 09:16:22.3579116 +0800 CST m=+0.209001001
    request 2 2019-10-30 09:16:22.5589099 +0800 CST m=+0.409999301
    request 3 2019-10-30 09:16:22.7591482 +0800 CST m=+0.610237601
    request 4 2019-10-30 09:16:22.9575729 +0800 CST m=+0.808662301
    request 5 2019-10-30 09:16:23.15802 +0800 CST m=+1.009109401

    运行程序,我们看到第一批请求意料之中的大约每 200ms 处理一次。

    坐标: 上一个例子   下一个例子

  • 相关阅读:
    day 38
    day 37
    day 36
    day 35
    day 34
    day 33
    day 32
    day 31
    day 30
    day 29
  • 原文地址:https://www.cnblogs.com/yhleng/p/11762907.html
Copyright © 2011-2022 走看看