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 处理一次。
go语言从例子开始之Example34.速率限制的更多相关文章
- gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(下)
第一篇文章(大约半年前写的):https://www.cnblogs.com/cgzl/p/11246324.html gRPC in ASP.NET Core 3.x -- Protocol Buf ...
- 自学SQL语言的例子(使用MySQL实现)
SQL语言作为一种数据库管理的标准语言有着极为广泛的应用场景,菜鸟入门选用的数据库软件是轻量级的免费(这个极为重要)的MySQL,下载链接如下:http://www.mysql.com/downloa ...
- go语言从例子开始之Example10.map(字典)
map 是 Go 内置关联数据类型(在一些其他的语言中称为哈希 或者字典 ) package main import "fmt" func main() { 要创建一个空 map, ...
- go语言从例子开始之Example13.函数多返回值
Go 内建多返回值 支持.这个特性在 Go 语言中经常被用到,例如用来同时返回一个函数的结果和错误信息. Example: package main import "fmt" // ...
- go语言从例子开始之Example20.错误处理
Go 语言使用一个独立的·明确的返回值来传递错误信息的.这与使用异常的 Java 和 Ruby 以及在 C 语言中经常见到的超重的单返回值/错误值相比,Go 语言的处理方式能清楚的知道哪个函数返回了错 ...
- go语言从例子开始之Example39.使用函数自定义排序
有时候我们想使用和集合的自然排序不同的方法对集合进行排序.例如,我们想按照字母的长度而不是首字母顺序对字符串排序.这里是一个 Go 自定义排序的例子. Example: package main im ...
- go语言从例子开始之Example38.排序
Go 的 sort 包实现了内置和用户自定义数据类型的排序功能.我们首先关注内置数据类型的排序. Example: package main import ( "fmt" &quo ...
- go语言从例子开始之Example37.Go 状态协程
在前面的例子中,我们用互斥锁进行了明确的锁定来让共享的state 跨多个 Go 协程同步访问.另一个选择是使用内置的 Go协程和通道的的同步特性来达到同样的效果.这个基于通道的方法和 Go 通过通信以 ...
- go语言从例子开始之Example36.互斥锁
在前面的例子中,我们看到了如何使用原子操作来管理简单的计数器.对于更加复杂的情况,我们可以使用一个互斥锁来在 Go 协程间安全的访问数据. Example: package main import ( ...
随机推荐
- python学习笔记(十一)处理json
json串就是字符串,json串里必须是双引号 d={'car':{'color':'red','price':100,'count':50}, '爱分叉':{'color':'red','price ...
- 转Oracle、MySql、SQLServer 数据分页查询
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...
- C# 图片剪切与缩小的实例
public void CutToF(Stream stream) { Image initImage = Image.FromStream(stream, true); && ini ...
- ECharts t图表组件使用心得
1.使用较多的是“柱状图”和“折线图”: 2.数据列的展示不能够直接输入字符串,正确的做法是将字符串转换成数字类型,这样在生成的图表上才会显示最大值和最小值: 3.对上 1 点的补充,数据列应该使用数 ...
- ASP.NET-配置Dubug和Release生成不同的Web.config
配置 Dubug 和 Release 生成不同的 Web.config Web.config Transformation Syntax for Web Application Project Dep ...
- php面向对象的重写与重载
重写: 就是当子类继承父类的一些方法后,子类又在其内部定义了相同的方法,则这个新定义的方法会覆盖继承而来的父类的方法,子类只能调用其内部定义的方法. 有以下几点要求: 1.当一个父类和子类有一个方法, ...
- Borland C++ Builder 编译绿色Exe程序
按照“打开Project/Option 翻到Packages页,去掉Build with runtime packages前面的勾. http://www.jinyuanbao.cn翻到Linker页 ...
- 应用安全-Web安全-越权漏洞整理
login->register GetPhone->GetPasswd GetPwd->GetPassword 遍历https://xx.com/contacts/new?user_ ...
- < 备考CET6 - 替换词 >
替换词 名词 结果 Result consequence 人 People, person citizen, individual 发展 Development advancement,progres ...
- SAP中寻找增强的实现方法(转)
SAP 增强已经发展过几代了,可参考 SAP 标准教材 BC425 和 BC427.简单的说SAP的用户出口总共有四代:1.第一代 基于源代码的增强.SAP提供一个空代码的子过程,在这个子过程中用户 ...