扫码阅读
手机扫码阅读

固定QPS异步任务功能初探

352 2024-04-03

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:固定QPS异步任务功能初探
文章来源:
FunTester
扫码关注公众号

摘要

文章讲述了作者根据Go语言的概念,使用关键字fun在Java环境中实现异步执行功能的经历。作者通过定长线程池执行异步任务,并在实际使用中发现效果良好,同时增进了对线程池的理解。常见的使用场景包括异步上报数据、多线程执行大量任务和进行简单的并发测试。

新需求与解决方案

新的需求是控制请求的QPS(每秒查询率),而不是通过线程池的大小来控制并发压力。为此,作者查阅了资料,发现虽然有许多限流框架或组件能实现这一功能,但对于作者的需求来说过于复杂。因此,作者选择了使用java.util.concurrent.Semaphore流量控制类,这是一个广泛应用于线程安全场景中的Java并发工具类。

API简介与实现

Semaphore的API简介包括其构造方法、获取和释放许可的方法。作者的实现思路是通过异步线程池获取许可,然后执行任务,并在1秒后释放许可。实现时,为了解决Groovy和Java闭包不兼容的问题,作者采用了Groovy closure与Java function转换的兼容性方案。

流量设置与测试

作者展示了如何使用Semaphore设置全局流量控制和如何获取及释放许可。在测试用例中,作者设置了一个较小的QPS,然后循环添加异步任务,通过控制台输出验证了功能。测试结果显示,当线程池满时,任务会积压,作者认为这是一个现实问题,目前还未处理,将在未来遇到时再进行解决。

总结

最后,文章推荐了FunTester原创专题,包括接口功能测试、性能测试、Groovy、Java、Go、Python等多个领域的专题,以及社群风采、测试理论、视频专题等内容。

想要了解更多内容?

查看原文:固定QPS异步任务功能初探
文章来源:
FunTester
扫码关注公众号