QPS的概念和实现

QPS的概念和实现

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.QPS实现
    • 拓展实现
    • 性能参数测试:
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk is cheap, show me the code,make a better result.

目录

概述

QPS是一种非常常见的需求。

需求:

1.QPS的实现

package qps.demo;

/**
 * @desc QPS控制器测试
 * @author visy.wang
 * @date 2020/9/29 10:25
 */
public class Main {
	/**
	 * 在多线程环境下,请确保拿到的QPSCtrl对象是同一个,
	 * 建议在此处初始化,当然也可用别的方式创建(但需保证是同一个)
	 * 不同的QPSCtrl对象是彼此独立的
	 */
	private static QPSCtrl qpsCtrl1 = QPSCtrl.create(1);
//	private static QPSCtrl qpsCtrl2 = QPSCtrl.create(3);
	
	public void test1(int i){
		//调用ctrl()来实现QPS的控制
//		System.out.println(Thread.currentThread().getName()+"\t"+System.currentTimeMillis()+"开始访问\n");
//		System.out.println(Thread.currentThread().getName());
		qpsCtrl1.ctrl();
		System.out.println(Thread.currentThread().getName()+"\t"+i+"(I) ");
//		System.out.println(System.currentTimeMillis()+"END");
	}

//	public void test2(int i){
//		//超出QPS值会阻塞在这里,直到下一个周期
//		qpsCtrl2.ctrl();
//		System.out.print(i+"(II) ");
//	}

	public static void main(String[] args) {

		 long startTime = System.currentTimeMillis();
//		System.out.println("开始结束"+startTime);

		Main testQPS = new Main();

		new Thread(()->{
			for(int i=1; i<=3; i++){
				testQPS.test1(i);
			}
		}).start();

		new Thread(()->{
			for(int i=4; i<=6; i++){
				testQPS.test1(i);
			}
		}).start();

		
		 long endTime=0L;
		new Thread(()->{
			for(int i=7; i<=12; i++){
				testQPS.test1(i);
				
			}
			
		}).start();
		
		  endTime = System.currentTimeMillis(); 
		
//		System.out.println("开始结束"+endTime);
			
//		new Thread(()->{
//			for(int i=13; i<=18; i++){
//				testQPS.test2(i);
//			}
//		}).start();
			System.out.println("耗时"+Long.valueOf(endTime-startTime));		

	}
}


测试log:

耗时90
1656172702613===================== 
Thread-2	7(I) 
1656172703613===================== 
Thread-2	8(I) 
1656172704649===================== 
Thread-0	1(I) 
1656172705656===================== 
Thread-0	2(I) 
1656172706656===================== 
Thread-1	4(I) 
1656172707656===================== 
Thread-1	5(I) 
1656172708656===================== 
Thread-1	6(I) 
1656172709656===================== 
Thread-0	3(I) 
1656172710656===================== 
Thread-2	9(I) 
1656172711656===================== 
Thread-2	10(I) 
1656172712656===================== 
Thread-2	11(I) 
1656172713656===================== 
Thread-2	12(I) 

我疑惑的地方是为什么最后输出耗时呢?

设计思路

实现思路分析

1.QPS实现

拓展实现

这里参考:github:简单实现上述流程:
入门级实现:
: 部分源码实现.
: 源码实现

性能参数测试:

参考资料和推荐阅读

  1. QPS详解.
  2. 推荐阅读.

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

你可能感兴趣的:(【原则-模式-架构】,java,算法,c++)