go语言从例子开始之Example34.速率限制
2019-10-30 09:24 _天枢 阅读(294) 评论(0) 编辑 收藏 举报速率限制(英) 是一个重要的控制服务资源利用和质量的途径。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 处理一次。
作 者:
天枢
出 处:
http://www.cnblogs.com/yhleng/
关于作者:专注于软件自动化测试领域。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者
直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角
【
推荐】
一下。您的鼓励是作者坚持原创和持续写作的最大动力!