当前位置: 首页 > news >正文

小说网站静态页面模板网站外链快速建设

小说网站静态页面模板,网站外链快速建设,wordpress 教程 书籍,中国企业500强完整榜单🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 中,速率限制(Rate Limiting)是一种控制…

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

在 Go 中,速率限制(Rate Limiting)是一种控制请求速率的技术,通常用于防止过载、保护资源或实现公平访问。速率限制可以通过多种方式实现,包括使用通道、定时器和其他同步原语。

💻代码

通道限流

使用通道速率限制:代码使用了两种速率限制机制。
第一部分通过定时器限制请求的处理频率,第二部分允许在短时间内处理多个请求(突发请求),但仍然会受到后续请求的限制。

package mainimport ("fmt""time"
)func main() {// 创建一个缓冲通道 requests,容量为 5requests := make(chan int, 5)for i := 1; i <= 5; i++ {requests <- i // 向通道中发送请求}close(requests) // 关闭通道// 创建一个定时器,每 200 毫秒发出一次信号limiter := time.Tick(200 * time.Millisecond)// 处理请求for req := range requests {<-limiter                               // 等待定时器信号fmt.Println("request", req, time.Now()) // 输出请求和当前时间}// 创建一个用于突发请求的通道,容量为 3burstyLimiter := make(chan time.Time, 3)// 初始填充突发通道for i := 0; i < 3; i++ {burstyLimiter <- time.Now() // 向通道中发送当前时间}// 启动一个 goroutine,不断向 burstyLimiter 发送时间go func() {for t := range time.Tick(200 * time.Millisecond) {burstyLimiter <- t // 每 200 毫秒向通道中发送时间}}()// 创建一个缓冲通道 burstyRequests,容量为 5burstyRequests := make(chan int, 5)for i := 1; i <= 5; i++ {burstyRequests <- i // 向通道中发送请求}close(burstyRequests) // 关闭通道// 处理突发请求for req := range burstyRequests {<-burstyLimiter                         // 等待从 burstyLimiter 中取出时间fmt.Println("request", req, time.Now()) // 输出请求和当前时间}
}

Token Bucket 算法

Token Bucket 算法允许突发流量,但会限制长期的请求速率。每个请求消耗一个令牌,令牌以固定速率生成。

package mainimport ("fmt""time"
)func main() {// 创建一个通道作为令牌桶tokenBucket := make(chan struct{}, 3) // 最多 3 个令牌// 启动一个 goroutine 生成令牌go func() {for {tokenBucket <- struct{}{} // 每 200 毫秒放入一个令牌time.Sleep(200 * time.Millisecond)}}()// 处理请求for i := 1; i <= 10; i++ {<-tokenBucket // 等待获取令牌fmt.Println("Request", i, "at", time.Now())}
}

Leaky Bucket 算法

Leaky Bucket 算法是另一种速率限制方法,允许请求以固定速率流出。请求被放入一个“桶”中,如果桶满了,则新请求会被丢弃。

package mainimport ("fmt""time"
)func main() {// 创建一个通道作为桶bucket := make(chan struct{}, 3) // 桶的容量为 3// 启动一个 goroutine 持续从桶中流出go func() {for {time.Sleep(200 * time.Millisecond) // 每 200 毫秒流出一个请求select {case <-bucket:// 从桶中流出default:// 桶为空,什么也不做}}}()// 处理请求for i := 1; i <= 10; i++ {select {case bucket <- struct{}{}: // 尝试将请求放入桶中fmt.Println("Request", i, "at", time.Now())default:fmt.Println("Request", i, "dropped at", time.Now())}time.Sleep(100 * time.Millisecond) // 模拟请求间隔}
}

🔍理解

  • 速率限制 是控制请求频率的重要手段,能够有效防止系统过载。
  • 基于通道的实现 简单易用,适合基本的速率限制。
  • Token Bucket 和 Leaky Bucket 算法 提供了更灵活的速率控制,适合复杂的应用场景。
    Go 的并发特性使得实现这些算法变得简单和高效。通过 goroutine 和通道,可以轻松地管理并发请求和速率限制。

目前对go的理解还不能很好的理解到限流的强大,还需继续努力💪

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述

http://www.15wanjia.com/news/167619.html

相关文章:

  • 网站建设熊猫建站新浪网站开发语言
  • 外贸网站建设 蚂蚁 深圳学校网站报价方案
  • 网站代理被抓最新推广赚钱的app
  • 怎么做代理网站湖南省城乡建设勘测院 网站
  • 符合网络营销网站建设视频链接生成器在线
  • 如何用xampp做网站网站开发招标网
  • 怎么做水果网站网站建设业务范围
  • 广东省建设厅网站可以查在哪里创建网站平台
  • 自己做的网站安全吗微信开放平台账号怎么注销
  • 建企业网站多少钱应用中心下载
  • 重庆网站推广系统广告位招商怎么找客户
  • 与众不同的网站wordpress插件禁用
  • 营销型网站的目标东莞网络公司 网站建设
  • 网站建设总结报告包装设计专业
  • 网站建设及维护专业开发公司复工复产工作方案
  • 如何加快百度收录网站宁夏电力建设工程公司外部网站
  • 冠辰网站建设网站怎么发布
  • 备案 网站名称涉及到行业竞价移动网站
  • 检察院做网站的目的别做网络推广员
  • 烟台建设集团网站国内做网站建设知名的公司
  • 网站长春网站建设怎样在阿里云做网站
  • 石家庄制作网站推广wordpress+社交链接
  • 高校校园网站建设与运行公司流程建设的意义
  • 网页制作工具的选择与网站整体风格是有关系的企业网站设计网站
  • 马鞍山网站建设 明达广州网站建设哪个公司做得好些
  • 网站建设合同英文模板下载wordpress云标签
  • 人员调动在网站上怎么做php学生管理系统源码免费
  • 公司网站制作需要多少钱mysql创建WordPress
  • 网站管理后台地址苏州网站建设主页
  • wordpress游戏网站主题个人安装公司怎么注册