如何构建一个推荐的线程安全频率限制器?

2026-04-29 12:341阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2912个文字,预计阅读时间需要12分钟。

如何构建一个推荐的线程安全频率限制器?

很久以前,在学习使用Python的deque容器时,我撰写了一篇名为《Python3 deque双端队列创建与使用方法分析》的文章。近期,需要测试线上服务的性能,但又不愿意总是在QA那边排队,于是决定自己写一个性能测试脚本。

很早以前,在学习使用 Python 的deque容器时,我写了一篇文章python3 deque 双向队列创建与使用方法分析。最近需要压测线上服务的性能,又不愿意总是在 QA 那边排队,于是需要自己写一个压测用的客户端。其中一个核心需求就是要实现 QPS 限制。

于是,终究逃不开要在 C++ 中实现一个线程安全的频率限制器。

设计思路

所谓频率限制,就是要在一个时间段(inteval)中,限制操作的次数(limit)。这又可以引出两种强弱不同的表述:

  • 强表述:在任意一个长度等于设定的时间段(interval)的滑动窗口中,频率限制器放行的操作次数(count)都不高于限制次数(limit)。
  • 弱表述:在一组长度等于设定的时间段(interval)且紧密相连的固定窗口中,每一个窗口里频率限制器放行的操作次数(count)都不高于限制次数(limit)。

不难发现,强表述通过「滑动窗口」的方式,不仅限制了频率,还要求了操作在时间上的均匀性。前作的频率限制器,实际上对应了这里的强表述。但实际工程中,我们通常只需要实现弱表述的频率限制器就足够使用了。

对于弱表述,实现起来主要思路如下:

当操作计数(count)小于限制(limit)时直接放行;

单线程实现

在不考虑线程安全时,不难给出这样的实现。

阅读全文

本文共计2912个文字,预计阅读时间需要12分钟。

如何构建一个推荐的线程安全频率限制器?

很久以前,在学习使用Python的deque容器时,我撰写了一篇名为《Python3 deque双端队列创建与使用方法分析》的文章。近期,需要测试线上服务的性能,但又不愿意总是在QA那边排队,于是决定自己写一个性能测试脚本。

很早以前,在学习使用 Python 的deque容器时,我写了一篇文章python3 deque 双向队列创建与使用方法分析。最近需要压测线上服务的性能,又不愿意总是在 QA 那边排队,于是需要自己写一个压测用的客户端。其中一个核心需求就是要实现 QPS 限制。

于是,终究逃不开要在 C++ 中实现一个线程安全的频率限制器。

设计思路

所谓频率限制,就是要在一个时间段(inteval)中,限制操作的次数(limit)。这又可以引出两种强弱不同的表述:

  • 强表述:在任意一个长度等于设定的时间段(interval)的滑动窗口中,频率限制器放行的操作次数(count)都不高于限制次数(limit)。
  • 弱表述:在一组长度等于设定的时间段(interval)且紧密相连的固定窗口中,每一个窗口里频率限制器放行的操作次数(count)都不高于限制次数(limit)。

不难发现,强表述通过「滑动窗口」的方式,不仅限制了频率,还要求了操作在时间上的均匀性。前作的频率限制器,实际上对应了这里的强表述。但实际工程中,我们通常只需要实现弱表述的频率限制器就足够使用了。

对于弱表述,实现起来主要思路如下:

当操作计数(count)小于限制(limit)时直接放行;

单线程实现

在不考虑线程安全时,不难给出这样的实现。

阅读全文