golanglimit的简单介绍

本文目录一览:

Golang中的限速器 time/rate

在高并发的系统中,限流已作为必不可少的功能,而常见的限流算法有:计数器、滑动窗口、令牌桶、漏斗(漏桶)。其中滑动窗口算法、令牌桶和漏斗算法应用最为广泛。

这里不再对计数器算法和滑动窗口作介绍了,有兴趣的同学可以参考其它相关文章。

非常很好理解,就像有一个漏斗容器一样,漏斗上面一直往容器里倒水(请求),漏斗下方以 固定速率 一直流出(消费)。如果漏斗容器满的情况下,再倒入的水就会溢出,此时表示新的请求将被丢弃。可以看到这种算法在应对大的突发流量时,会造成部分请求弃用丢失。

可以看出漏斗算法能强行限制数据的传输速率。

令牌桶算法

从某种意义上来说,令牌算法是对漏斗算法的一种改进。对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发情况。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。

令牌桶算法是指一个固定大小的桶,可以存放的令牌的最大个数也是固定的。此算法以一种 固定速率 不断的往桶中存放令牌,而每次请求调用前必须先从桶中获取令牌才可以。否则进行拒绝或等待,直到获取到有效令牌为止。如果桶内的令牌数量已达到桶的最大允许上限的话,则丢弃令牌。

Golang标准库中的限制算法是基于令牌桶算法(Token Bucket) 实现的,库名为golang.org/x/time/rate

对于限流器的消费方式有三种,分别为 Allow()、 Wait()和 Reserve()。前两种内部调用的都是Reserve() ,每个都对应一个XXXN()的方法。如Allow()是AllowN(t, 1)的简写方式。

主要用来限速控制并发事件,采用令牌池算法实现。

使用 NewLimiter(r Limit, b int) 函数创建限速器,令牌桶容量为b。初始化状态下桶是满的,即桶里装有b 个令牌,以后再以每秒往里面填充 r 个令牌。

允许声明容量为0的限速器,此时将会拒绝所有操作。

// As a special case, if r == Inf (the infinite rate), b is ignored.

有一种特殊情况,就是 r == Inf 时,此时b参数将被忽略。

Limiter 提供了三个主要函数 Allow, Reserve, 和 Wait. 大部分时候使用Wait。其中 AllowN, ReserveN 和 WaitN 允许消费n个令牌。

每个方法都可以消费一个令牌,当没有可用令牌时,三个方法的处理方式不一样

AllowN方法表示,截止在某一时刻,目前桶中数目是否至少为n个。如果条件满足,则从桶中消费n个token,同时返回true。反之不消费Token,返回false。

使用场景:一般用在如果请求速率过快,直接拒绝请求的情况

输出

当使用Wait方法消费Token时,如果此时桶内Token数量不足(小于N),那么Wait方法将会阻塞一段时间,直至Token满足条件。否则直接返回。

// 可以看到Wait方法有一个context参数。我们可以设置context的Deadline或者Timeout,来决定此次Wait的最长时间。

输出

// 此方法有一点复杂,它返回的是一个*Reservation类型,后续操作主要针对的全是这个类型

// 判断限制器是否能够在指定时间提供指定N个请求令牌。

// 如果Reservation.OK()为true,则表示需要等待一段时间才可以提供,其中Reservation.Delay()返回需要的延时时间。

// 如果Reservation.OK()为false,则Delay返回InfDuration, 此时不想等待的话,可以调用 Cancel()取消此次操作并归还使用的token

输出

limit的所有用法是什么?

1.set a limit to:为xx设置一个限制/极限

2.the limit of:xx的极限

3.without limit:没有限制,无极限

4.limit sth to:将某物限制在xx范围内

例如:1.她知道自己的权限 She knows her limit.

2.我为了减肥,限定自己每天摄入1000卡的热量

In order to lose weight, I limit my daily intake of calories to 1000. n. 限度;限制;界线 vt. 限制;限定 limit [‘limit] n. 1. 界限,界线,限度,极限,极点 2. [复数] 范围;境界;领土 3. (渔、猎等的)限额;限量;限度 4. (一次下的)赌注限额 5. [the limit] [口语]使人恼怒或高兴到极点的人(或事);叫人无法忍受的人(或事) 6. 【数学】 (数列的)极限 (函数的)极限 (定积分的)极限 vt. 1. 限制;限定(在一定范围内): 例句: The teacher limited her to 800 words for her composition.

老师将她的作文限定在800字以内。 Class membership is limited to 20.

班级人数限定在20名以内。 2. 减少;削减: 例句: We should limit the expenses.

我们应该节省开支。 3. 【法律】确定;确切指派: 例句: to limit an estate over to someone

将一份产业判定给某人 近义词: bound . restrict . 反义词: widen . expand . 短语 1. be the limit[口语]太过分,叫人无法忍受;使人无法可想 [参见 That’s the limit.] 2. go beyond (或 over) the limit过分;超过限度 3. go the limit

a. [美国英语] b. 【体育】(球赛或拳击赛等)打全场,赛完全局,打到规定的回数 c. 达到极限;达到最后阶段;坏到无以复加的地步 d. 开始性交 4. have (或 know) (no) limits有(没有)限度 5. off limits[美国英语] (尤指军人)禁止入内;禁区 6. reach the limit of one’s resources山穷水尽 7. set a limit to对…加以限制;控制 8. That’s the limit.[口语]这实在太过分了。简直令人忍无可忍。不能再忍了。 9. there is a limit (或 are limits) to…是有限的 10. to the (utmost) limit[美国英语]到极点,到了最大限度 11. within (one’s) limits在一定范围内;适度地,有限度地 12. without limit无限地;无限制地

Go 限制同时执行的线程数

假设,现在有1w个任务,需要通过线程并发执行。如果直接执行,会把内存撑爆。需要让这些任务一批一批执行。如果设定,每次最多同时执行10个任务。

需要用到通道channel,利用channel的limit,通过堵塞通道的方式,把进程堵住。

原创文章,作者:EYWG,如若转载,请注明出处:https://www.506064.com/n/143409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
EYWGEYWG
上一篇 2024-10-19 16:43
下一篇 2024-10-19 16:43

相关推荐

  • Python简单数学计算

    本文将从多个方面介绍Python的简单数学计算,包括基础运算符、函数、库以及实际应用场景。 一、基础运算符 Python提供了基础的算术运算符,包括加(+)、减(-)、乘(*)、除…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • Python海龟代码简单画图

    本文将介绍如何使用Python的海龟库进行简单画图,并提供相关示例代码。 一、基础用法 使用Python的海龟库,我们可以控制一个小海龟在窗口中移动,并利用它的“画笔”在窗口中绘制…

    编程 2025-04-29
  • Python樱花树代码简单

    本文将对Python樱花树代码进行详细的阐述和讲解,帮助读者更好地理解该代码的实现方法。 一、简介 樱花树是一种图形效果,它的实现方法比较简单。Python中可以通过turtle这…

    编程 2025-04-28
  • Python大神作品:让编程变得更加简单

    Python作为一种高级的解释性编程语言,一直被广泛地运用于各个领域,从Web开发、游戏开发到人工智能,Python都扮演着重要的角色。Python的代码简洁明了,易于阅读和维护,…

    编程 2025-04-28
  • 用Python实现简单爬虫程序

    在当今时代,互联网上的信息量是爆炸式增长的,其中很多信息可以被利用。对于数据分析、数据挖掘或者其他一些需要大量数据的任务,我们可以使用爬虫技术从各个网站获取需要的信息。而Pytho…

    编程 2025-04-28
  • 如何制作一个简单的换装游戏

    本文将从以下几个方面,为大家介绍如何制作一个简单的换装游戏: 1. 游戏需求和界面设计 2. 使用HTML、CSS和JavaScript开发游戏 3. 实现游戏的基本功能:拖拽交互…

    编程 2025-04-27
  • Guava Limiter——限流器的简单易用

    本文将从多个维度对Guava Limiter进行详细阐述,介绍其定义、使用方法、工作原理和案例应用等方面,并给出完整的代码示例,希望能够帮助读者更好地了解和使用该库。 一、定义 G…

    编程 2025-04-27
  • 2的32次方-1:一个看似简单却又复杂的数字

    对于计算机领域的人来说,2的32次方-1(也就是十进制下的4294967295)这个数字并不陌生。它经常被用来表示IPv4地址或者无符号32位整数的最大值。但实际上,这个数字却包含…

    编程 2025-04-27
  • 制作一个简单的管理系统的成本及实现

    想要制作一个简单的管理系统,需要进行技术选型、开发、测试等过程,那么这个过程会花费多少钱呢?我们将从多个方面来阐述制作一个简单的管理系统的成本及实现。 一、技术选型 当我们开始思考…

    编程 2025-04-27

发表回复

登录后才能评论