培训首页  >  软件开发新闻  >  兄弟连Go语言培训Go请求处理频率控制

兄弟连Go语言培训Go请求处理频率控制

[2018-07-30 17:11:54] 浏览量:64 来源:

北京兄弟连IT

  兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌团队精心打造,历时半年时间共同研发而出。 

Go 请求处理频率控制
频率控制是控制资源利用和保证服务高质量的重要机制。Go可以使用goroutine,channel和ticker来以优
雅的方式支持频率控制。

package main

import "time"

import "fmt"

func main() {

// 首先我们看下基本的频率限制。假设我们得控制请求频率,

// 我们使用一个通道来处理所有的这些请求,这里向requests

// 发送5个数据,然后关闭requests通道

requests := make(chan int, 5)

for i := 1; i <= 5; i++ {

requests <- i

}

close(requests)

// 这个limiter的Ticker每隔200毫秒结束通道阻塞

// 这个limiter就是我们频率控制处理器

limiter := time.Tick(time.Millisecond * 200)

// 通过阻塞从limiter通道接受数据,我们将请求处理控制在每隔200毫秒

// 处理一个请求,注意`<-limiter`的阻塞作用。

for req := range requests {

<-limiter

fmt.Println("request", req, time.Now())

}

// 我们可以保持正常的请求频率限制,但也允许请求短时间内爆发

// 我们可以通过通道缓存来实现,比如下面的这个burstyLimiter

// 就允许同时处理3个事件。

burstyLimiter := make(chan time.Time, 3)

// 填充burstyLimiter,先发送3个数据

for i := 0; i < 3; i++ {

burstyLimiter <- time.Now()

}

 // 然后每隔200毫秒再向burstyLimiter发送一个数据,这里是不断地

// 每隔200毫秒向burstyLimiter发送数据

go func() {

for t := range time.Tick(time.Millisecond * 200) {

burstyLimiter <- t

}

}()

// 这里模拟5个请求,burstyRequests的前面3个请求会连续被处理,

// 因为burstyLimiter被先连续发送3个数据的的缘故,而后面两个

// 则每隔200毫秒处理一次

burstyRequests := make(chan int, 5)

for i := 1; i <= 5; i++ {

burstyRequests <- i

}

close(burstyRequests)

for req := range burstyRequests {

<-burstyLimiter

fmt.Println("request", req, time.Now())

}

}



运行结果
request 1 2014-02-21 14:20:05.2696437 +0800 CST
request 2 2014-02-21 14:20:05.4696637 +0800 CST
request 3 2014-02-21 14:20:05.6696837 +0800 CST
request 4 2014-02-21 14:20:05.8697037 +0800 CST
request 5 2014-02-21 14:20:06.0697237 +0800 CST
request 1 2014-02-21 14:20:06.0697237 +0800 CST
request 2 2014-02-21 14:20:06.0697237 +0800 CST
request 3 2014-02-21 14:20:06.0707238 +0800 CST
request 4 2014-02-21 14:20:06.2707438 +0800 CST
request 5 2014-02-21 14:20:06.4707638 +0800 CST
我们从输出的结果上可以看出最后的5个输出结果中,个的时间是连续的,而后两个的时间是隔了200

毫秒。

文中图片素材来源网络,如有侵权请联系删除
  • 软件开发
  • 软件测试
  • 数据库
  • Web前端
  • 大数据
  • 人工智能
  • 零基础
  • 有HTML基础
  • 有PHP基础
  • 有C语言基础
  • 有JAVA基础
  • 其他计算机语言基础
  • 周末班
  • 全日制白班
  • 随到随学

该校与厚学网暂未合作,平台不保证课程的真实有效性。

如有侵权等争议,请及时与厚学网联系处理

网上报名

热门信息