精华内容
下载资源
问答
  • (1)什么是响应式编程——响应式Spring的道法术器

    万次阅读 多人点赞 2018-03-06 10:54:22
    1.1 什么是响应式编程? 在开始讨论响应式编程(Reactive Programming)之前,先来看一个我们经常使用的一款堪称“响应式典范”的强大的生产力工具——电子表格。 举个简单的例子,某电商网站正在搞促销活动,任何...

    本系列其他文章见:《响应式Spring的道法术器》

    响应式编程之道

    1.1 什么是响应式编程?

    在开始讨论响应式编程(Reactive Programming)之前,先来看一个我们经常使用的一款堪称“响应式典范”的强大的生产力工具——电子表格。

    举个简单的例子,某电商网站正在搞促销活动,任何单品都可以参加“满199减40”的活动,而且“满500包邮”。吃货小明有选择障碍(当然主要原因还是一个字:穷),他有个习惯,就是先在Excel上根据预算算好自己要买的东西:

    RX9VjUmQltKah38.jpg

    相信大家都用过Excel中的公式,这是一个统计购物车商品和订单应付金额的表格,其中涉及到一些公式:

    q4p6hzMXQfYPurA.jpg

    上图中蓝色的线是公式的引用关系,从中可以看出,“商品金额”是通过“单价x数量”得到的,“满199减40”会判断该商品金额是否满199并根据情况减掉40,右侧“订单总金额”是“满199减40”这一列的和,“邮费”会根据订单总金额计算,“最终应付款”就是订单总金额加上邮费。

    1.1.1 变化传递(propagation of change)

    为什么说电子表格软件是“响应式典范”呢,因为“单价”和“数量”的任何变动,都会被引用(“监听”)它的单元格实时更新计算结果,如果还有图表或数据透视图引用了这块数据,那么也会相应变化,做到了实时响应。变化的时候甚至还有动画效果,用户体验一级棒!

    这是响应式的核心特点之一:变化传递(propagation of change)。一个单元格变化之后,会像多米诺骨牌一样,导致直接和间接引用它的其他单元格均发生相应变化。

    Ex2SfmLoNg7TOuw.jpg

    看到这里,你可能会说,“切~ 不就是算付款金额吗,购物网站上都有这个最基础不过的功能啊”,这就“响应式”啦?但凡一个与用户交互的系统都得“响应”用户交互啊

    但是在响应式编程中,基于“变化传递”的特点,触发响应的主体发生了变化。假设购物车管理和订单付款是两个不同的模块,或者至少是两个不同的类——CartInvoice。也许我们的代码是这样的:

    Product.java(假设商品有两个属性nameprice,简单起见,price就不用BigDecimal类型了)

    public class Product {
        private String name;
        private double price;
        // 构造方法、getters、setters
    }
    

    Cart模块中:

    import com.example.Invoice; // 2
    
    public class Cart {
        ...
        public boolean addProduct(Product product, int quantity) {
            ...
            double figure = product.getPrice() * quantity;
            invoice.update(figure); // 1
            ...
        }
        ...
    }
    
    1. 是由Cart的对象去调用Invoice对象的更新订单金额的方法;
    2. Cart的代码中需要import Invoice

    而我们再观察这个Excel,发现“订单总金额”的计算公式不仅位于自己的单元格中,而且这个公式能主动监听和响应购物车数据的变化事件。对于购物车来说,它没有对订单付款方面的任何公式引用。感觉就像这样:

    假设数据流有操作的商品product和变化个数quantity两个属性:

    public class CartEvent {
        private Product product;
        private int quantity;
        // 构造方法、getters、setters
    }
    

    Invoice模块中:

    import com.example.Cart // 2
    
    public class Invoice {
        ...
        public Invoice(Cart cart) {
            ...
            this.listenOn(cart);    // 1
            ...
        }
        // 回调方法
        public void onCartChange(CartEvent event) {
            ...
        }
        ...
    }
    
    1. 是由Invoice的对象在初始化的时候就声明了对Cart对象的监听,从而一旦Cart对象有响应的事件(比如添加商品)发生的时候,Invoice就会响应;
    2. Invoice的代码中import Cart

    做过Java桌面开发的朋友可能会想到Java swing中的各种监听器,比如MouseListener能够监听鼠标的操作,并实时做出响应。所以C/S的客户端总是比B/S的Web界面更具有响应性嘛。

    所以,这里我们说的是一种生产者只负责生成并发出数据/事件,消费者来监听并负责定义如何处理数据/事件的变化传递方式

    那么,Cart对象如何在发生变化的时候“发出”数据或事件呢?

    1.1.2 数据流(data stream)

    这些数据/事件在响应式编程里会以数据流的形式发出。

    我们再观察一下购物车,这里有若干商品,小明每次往购物车里添加或移除一种商品,或调整商品的购买数量,这种事件都会像过电一样流过这由公式串起来的多米诺骨牌一次。这一次一次的操作事件连起来就是一串数据流(data stream),如果我们能够及时对数据流的每一个事件做出响应,会有效提高系统的响应水平。这是响应式的另一个核心特点:基于数据流(data stream)

    如下图是小明选购商品的过程,为了既不超预算,又能省邮费,有时加有时减:

    这一次一次的操作就构成了一串数据流。Invoice模块中的代码可能是这样:

        public Invoice(Cart cart) {
            ...
            this.listenOn(cart.eventStream());  // 1
            ...
        }
    
    1. 其中,cart.eventStream()是要监听的购物车的操作事件数据流,listenOn方法能够对数据流中到来的元素依次进行处理。

    1.1.3 声明式(declarative)

    我们再到listenOn方法去看一下:

    Invoice模块中,上边的一串公式被组装成如下的伪代码:

        public void listenOn(DataStream<CartEvent> cartEventStream) {   // 1
            double sum = 0;
            double total = cartEventStream
                // 分别计算商品金额
                .map(cartEvent -> cartEvent.getProduct().getPrice() * cartEvent.getQuantity())  // 2
                // 计算满减后的商品金额
                .map(v -> (v > 199) ? (v - 40) : v)
                // 将金额的变化累加到sum
                .map(v -> {sum += v; return sum;})
                // 根据sum判断是否免邮,得到最终总付款金额
                .map(sum -> (sum > 500) ? sum : (sum + 50));
            ...
    
    1. cartEventStream是数据流,DataStream是某种数据流类型,可以暂时想象成类似在Java 8版本增加的对数据流进行处理的Stream API(下节会说到为啥不用Java Stream)。

    2. map方法用于对数据流中的元素进行映射,比如第一个将cartEvent中的商品价格和数量拿到,然后算出本次操作的金额;第二个判断是否能享受“满199减40”的活动。

    这里的伪代码用到了lambda,它非常适用于数据流的处理。没有接触过lambda的话没有关系,我们后续会再聊到它。

    这是一种**“声明式(declarative)”**的编程范式。通过四个串起来的map调用,我们先声明好了对于数据流“将会”进行什么样的处理,当有数据流过来时,就会按照声明好的处理流程逐个进行处理。

    比如对于第一个map操作:

    olW5mzADdxHt6nS.jpg

    **声明式编程范式的威力在于以不变应万变。**无论到来的元素是什么,计算逻辑是不变的,从而形成了一种对计算逻辑的“绑定”。

    再举个简单的例子方便理解:

    a = 1;
    b = a + 1;
    a = 2;
    

    这个时候,b是多少呢?在Java以及多数语言中,b的结果是2,第二次对a的赋值并不会影响b的值。

    假设Java引入了一种新的赋值方式:=,表示一种对a的绑定关系,如

    a = 1;
    b := a + 1;
    a = 2;
    

    由于b保存的不是某次计算的值,而是针对a的一种绑定关系,所以b能够随时根据a的值的变化而变化,这时候b==3,我们就可以说:=是一种声明式赋值方式。而普通的=是一种命令式赋值方式。事实上,我们绝大多数的开发都是命令式的,如果需要用命令式编程表达类似上边的这种绑定关系,在每次a发生变化并需要拿到b的时候都得执行b = a + 1来更新b的值。

    如此想来,“绑定美元政策”不也是一种声明式的范式吗~

    总结来说,命令式是面向过程的,声明式是面向结构的

    不过命令式和声明式本身并无高低之分,只是声明式比较适合基于流的处理方式。这是响应式的第三个核心特点:声明式(declarative)。结合“变化传递”的特点,声明式能够让基于数据流的开发更加友好。

    1.1.4 总结

    总结起来,响应式编程(reactive programming)是一种基于数据流(data stream)和变化传递(propagation of change)的声明式(declarative)的编程范式。

    响应式编程的“变化传递”就相当于果汁流水线的管道;在入口放进橙子,出来的就是橙汁;放西瓜,出来的就是西瓜汁,橙子和西瓜、以及机器中的果肉果汁以及残渣等,都是流动的“数据流”;管道的图纸是用“声明式”的语言表示的。

    这种编程范式如何让Web应用更加“reactive”呢?

    我们设想这样一种场景,我们从底层数据库驱动,经过持久层、服务层、MVC层中的model,到用户的前端界面的元素,全部都采用声明式的编程范式,从而搭建一条能够传递变化的管道,这样我们只要更新一下数据库中的数据,用户的界面上就相应的发生变化,岂不美哉?尤其重要的是,一处发生变化,我们不需要各种命令式的调用来传递这种变化,而是由搭建好的“流水线”自动传递。

    这种场景用在哪呢?比如一个日志监控系统,我们的前端页面将不再需要通过“命令式”的轮询的方式不断向服务器请求数据然后进行更新,而是在建立好通道之后,数据流从系统源源不断流向页面,从而展现实时的指标变化曲线;再比如一个社交平台,朋友的动态、点赞和留言不是手动刷出来的,而是当后台数据变化的时候自动体现到界面上的。

    具体如何来实现呢,请看下一节关于响应式流的介绍。

    展开全文
  • 响应比公式分析

    2021-05-27 09:15:13
    每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法...

    R =(W+T)/T = 1+W/T
    T为该作业估计需要的执行时间;
    W为作业在后备状态队列中的等待时间。
    每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。

    展开全文
  • 响应比优先

    千次阅读 2018-11-22 12:13:13
    响应比优先调度算法(Highest Response Ratio Next)是一种对CPU中央控制器响应比的分配的一种算法。HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折中算法,既考虑作业等待时间又考虑作业运行...

             高响应比优先调度算法(Highest Response Ratio Next)是一种对CPU中央控制器响应比的分配的一种算法。HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折中算法,既考虑作业等待时间又考虑作业运行时间,既照顾短作业又不使长作业等待时间过长,改进了调度性能。

     

    #include<cstdio>
    #include<cstdlib>
    #include<ctime>
    #include<iostream>
    #include<queue>
    #include<list>
    #include<thread>
    #include<mutex>
    #include<Windows.h>
    using namespace std;
    #define MAX_TIME 99999
    int g_time = 0;
    mutex g_mutex_time;
    
    
    
    struct process_node
    {
    	int prcess_id;  //进程编号
    	int _start;  //进入时间
    	void(*main_doing)(int args, char *ptr_argv[]);//本进程完成的任务
    	int begin;   //开始时间
    	int finish;  //完成时间
    	int _function; //需要运行时间
    	int function; //已经运行的时间
    	int wait;
    	bool complete;	 //是否完成   true 完成
    };
    
    list<process_node*>q_list;//进程队列
    
    
    void showlist()
    {
    
    	for (auto ib = q_list.begin(); ib != q_list.end(); ib++)
    	{
    		cout << (*ib)->prcess_id << "    "<<(*ib)->wait<<"    ||";
    	}
    	cout << "\n";
    
    }
    void main_doing(int args, char *ptr_argv[])
    {
    	cout << args << "这是一个运行的实例" << endl;
    	Sleep(200);
    }
    
    void Come_Init_Prcess(void(*main_doing)(int args, char *ptr_argv[]), int _function) //模拟进程到来并且初始化
    {
    	static int id = 0;
    	process_node *p = new process_node;
    	p->prcess_id = ++id;
    	p->_start = g_time;
    	p->main_doing = main_doing;
    	p->_function = _function;
    	p->begin = MAX_TIME;
    	p->wait = 0;
    	p->finish = MAX_TIME;
    	p->function = 0;
    	p->complete = false;
    	q_list.push_back(p);
    }
    void Time_End_Work(process_node & current_process)//时间片结束的前的工作
    {
    	if (current_process.function >= current_process._function)//判断是否完成
    	{
    		current_process.complete = true;
    		current_process.finish = g_time;
    		cout << "进程" << current_process.prcess_id << "完成任务" << endl;
    		int wait = current_process.finish - current_process.begin;
    		q_list.remove(&current_process);
    		for (auto ib = q_list.begin(); ib != q_list.end(); ib++)
    		{
    			(*ib)->wait += wait;
    		}
    	}
    }
    void One_End_Process(process_node & current_process)
    {
    	int current_point = g_time;
    	cout << "当前时间" << current_point << endl;
    	while (current_point + current_process._function >= g_time)
    	{
    		current_process.main_doing(current_process.prcess_id, NULL);
    	}
    	current_process.function += g_time - current_point;
    	Time_End_Work(current_process);
    }
    process_node& Obtain_Obtain()//获取优先者
    {
    	float temp = 0.0;
    	process_node *p_temp = nullptr;
    	while (q_list.size() == 0);
    	for (auto ib = q_list.begin(); ib != q_list.end(); ib++)
    	{
    		if ((float)(((*ib)->_function + (*ib)->wait)/ (*ib)->_function) > temp)
    		{
    			temp = (float)(((*ib)->_function + (*ib)->wait) / (*ib)->_function);
    			p_temp = (*ib);
    		}
    	}
    
    	cout << "优先的是程序" << p_temp->prcess_id << endl;
    	p_temp->begin = g_time;
    	return *p_temp;
    }
    void Run_begin()
    {
    
    	while (1)
    	{
    		process_node &p_temp = Obtain_Obtain();
    		showlist();
    		One_End_Process(p_temp);
    	}
    }
    //时间实例到达
    void pthread_model()
    {
    	time_t ts;
    	srand((unsigned int)time(&ts));
    	while (1)
    	{
    		int x_temp = 0;
    		lock_guard<mutex>ldg(g_mutex_time);
    		cout << "时间:[" << g_time << "]" << endl;
    		if (g_time % 2 == 0)
    		{
    			while (1)
    			{
    				x_temp = rand() % 5;
    				if (x_temp > 0)
    				{
    					break;
    				}
    			}
    			Come_Init_Prcess(main_doing, x_temp);
    			cout << "实例到达" << endl;
    		}
    		Sleep(1000);
    		g_time++;
    	}
    
    }
    
    int main()
    {
    	thread th_model(pthread_model);
    	thread th_main(Run_begin);
    	th_model.join();
    	th_main.join();
    
    	cin.get();
    
    }
    
    
    

     

    展开全文
  • 响应比优先算法

    万次阅读 2016-08-30 20:54:20
    优先权 = (等待时间 + 要求服务时间) / 要求服务时间又因为等待时间 + 要求服务时间 = 响应时间优先权 = 响应时间 / 要求服务时间故而称之为,高响应比优先算法。那么,这个计算公式,怎么就能体现上面三个综合...

    这个算法很好玩,综合了短作业优先,先来先服务,以及长作业也能得到服务的特性,因此,是一种综合的调度算法。

    计算公式:
    优先权 = (等待时间 + 要求服务时间) / 要求服务时间

    又因为等待时间 + 要求服务时间 = 响应时间

    优先权 = 响应时间 / 要求服务时间

    故而称之为,高响应比优先算法。

    那么,这个计算公式,怎么就能体现上面三个综合特性呢?

    首先,短作业优先。
    短作业优先是因为,要求服务时间在分子,如果要求服务时间很短,且等待时机我们认为相等,那么短作业就有更高的优先权。

    其次,先来先服务。
    假设要求服务时间相同,那么先来的作业等待时间肯定较长,所以先来的优先级更高。

    最后,长作业也不会沦落到没法调度的尴尬局面。因为一个长作业,等啊等,越等自己自己资历越老,优先级是在不断增长的,所以总会有机会熬出头的!

    因此,高响应比优先算法,实在很妙。
    但是,不得不承认,计算这个优先级是要付出代价的,关键是这个代价是不是可以忽略。

    展开全文
  • 在跑场景时,会碰到这样一种情况,使用LoadRunner测试出来的响应时间实际使用浏览器感受到的时间要长,例如,实际使用浏览器打开一个系统时只需要1~2秒,而使用LoadRunner跑一个用户所得出的结果可能是远远超过实际...
  • 响应比优先算法-记录

    万次阅读 2019-08-29 21:37:02
    这里记录一下高响应比优先算法的思想,它结合了短作业优先+先来先服务+不冷落长作业等特点,成为一种综合的动态调度算法,常用在操作系统的任务进程调度中。 它的计算公式如下: 优先权 = (等待时间 + 要求服务...
  • 例题:最高响应比优先调度算法

    千次阅读 2020-11-05 18:43:38
    响应比优先HRRN 高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业...
  • 响应比最高者优先调度算法(HRRF)

    万次阅读 多人点赞 2018-05-10 22:32:29
    响应比最高者优先算法是通过计算输入井后备队列中每个作业的响应比大小,从中选择响应比最高的作业装入主存,这样既考虑了作业的等待时间,又考虑了作业的运行时间。 二、实验要求 假设本系统仍采用单道批处理...
  • 最高响应比优先算法

    千次阅读 2020-03-20 17:14:26
    最高响应比优先算法(HRN) eg: process Arrival Burst time P1 0 10 P2 2 16 P3 5 5 如果题干说从0时刻开始运行:        由于P1先到达所以先运行P1,由于HRN算法...
  • 什么是响应式布局设计?

    千次阅读 2018-02-12 10:02:26
    伊桑·马科特(Ethan Marcotte)在2010年首先提出了响应式网页设计(RWD,Responsive Web Design)这个术语。在他的一篇文章《Responsive Web Design · An A List Apart ...那什么才是真正的响应式设计?马科特说,...
  • 作业调度实现——最高响应比

    千次阅读 2018-12-09 11:17:28
    C语言实现最高响应比(操作系统程序调度) 作业调度的算法有多种: 1.先来先服务(First Come First Served,FCFS) 2.最短作业优先(Shortest Job First,SJF) 3.最短剩余时间优先(Shortest Remaining Time ...
  • 响应比优先调度算法(HRRN)例题详解

    万次阅读 多人点赞 2020-03-25 15:43:33
    响应比优先调度算法 (HRRN) 高响应比优先调度算法(Highest Response Ratio Next)是一种对CPU中央控制器响应比的分配的一种算法。HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折中算法,既...
  • 到底什么样的设计才是响应式设计

    千次阅读 2016-02-26 11:47:08
    出现的背景有两个原因:一是屏幕设备的尺寸繁多,针对移动端和PC端只少需要两套页面;二是CSS3的Media Queries的出现,使得CSS3可以探测到浏览器可视区的宽度。...于是响应式设计诞生了。...响应式设计
  • 什么是http请求和http响应

    万次阅读 2018-06-20 16:41:05
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Messages什么是HTTP?超文本传输​​协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于...
  • 我在中国外汇交易中心工作过一段时间,当时有个专业的Loadrunner测试团队,他们的测试结果:为什么100个用户的响应时间反而50个用户的响应时间更短。 分析:首先这肯定是一种不正常的现象,因为按照常理用户越多...
  • HRRN(高响应比优先算法) 算法思想: 要综合考虑作业/进程的等待时间和要求服务时间 算法规则: 在每次调度时先计算各个作业/进程的响应比,选择响应比最高 的作业/进程为其服务 响应比响应比=(等待时间+要求...
  • C++、高响应比优先算法

    千次阅读 2018-12-06 20:55:38
    //自己加上的一个响应比,判断优先执行哪个作业  int sfzx; //标志位,用来标志该作业块是否执行过,0表示未执行,1表示已执行。 }; //1、其实这个结构体没有考虑到到达时间的问题,统一认为处理时刻所有作业都已经...
  • 响应比算法模拟(实验报告)

    千次阅读 2019-12-29 16:05:08
    响应比作业调度 实验目的和要求实验内容实验过程程序需要完成的任务数据结构流程图运行结果分析和讨论结论完整代码 实验目的和要求 掌握高响应比作业调度的概念和算法 加深对处理机分配的理解 实验内容 在集成...
  • 进程 计算响应比

    千次阅读 2013-03-21 23:44:59
    http://baike.baidu.com/view/4779698.htm
  • postman响应时间 是一个线程或者一个用户再者说是发送一次请求的响应时间,一般都是200ms一下; 而jmeter属于并行,就是多个用户去访问这个功能点或者接口,多个用户同时访问,就会造成压力,自然而然。系统的响应...
  • 响应比调度算法,简单的来说就是对每个进程对计算一个响应比,根据响应比的大小来判断要运行的进程。其实现思路如下: 具体步骤为: 首先定义进程控制块PCB类: class PCB { public: int ID; //进程ID int ...
  • 响应式布局与自适应布局的区别
  • 先来先服务和高响应比优先调度算法C语言实现

    万次阅读 多人点赞 2016-10-29 00:58:34
    1、进程调度与作业调度的区别: 2、单道批处理系统与多道批处理系统的区别: 3、程序设计用到的公式: 4、高响应比优先算法特点: 5、源代码示例: 6、测试用例: 7、运行结果:
  • 响应比优先调度算法: 该算法实际上是一种动态优先调度算法,它以相应比作为作业或进程的动态优先权,其目的是既照顾短作业,又考虑到作业的等待时间,使长作业不会长期等待;但每次调度前,都要进行响应比计算,...
  • 响应比优先调度算法则是既考虑了作业等待的时间,又考虑了作业运行时间的调度算法,因此既照顾了短作业,又不致使长作业的等待时间过长,从而改善了处理机的调度能力。 算法实现 优先权的变化规律: 优先权= (等.....
  • 操作系统中高响应比优先调度算法例子

    万次阅读 多人点赞 2018-10-20 10:45:27
    进程 到达时刻 运行时间/ms  P1 0 10 P2 1 1  P3 2 2  P4 3 1  P5 4 5  0时刻P1运行, 10时刻,P1运行完,此时P2-P5的响应比分别为: P2:(1+9)/1=10 P3:(2+8)/2=5...
  • 响应式布局

    千次阅读 2015-03-20 10:01:37
    今天就和大家来讲讲响应式布局这件小事,包含什么是响应式布局、响应式布局的优点和缺点以及响应式布局该怎么设计(通过CSS3 Media Query实现响应布局)。 看页面点击这里一、什么是响应式布局? 响应式布局是Et
  • 操作系统|高响应比优先算法(HRRN)

    千次阅读 2019-12-02 22:13:44
    首先,根据时间线的时间判断进程时间是否到达,如果进程时间到达,将进程存入缓冲池中,在每次执行前先计算出缓冲池中的进程响应比,得到响应比最高的进程信息,单步执行该进程 单步执行进程信息 //单步执行进程 ...
  • 设计PCB结构,建立进程就绪队列,编制高响应比优先调度算法进程调度算法。实验原理:高响应比优先调度算法则是既考虑了作业的等待时间,又考虑作业运行时间的调度算法,因此既照顾了短作业,又不致使长作业的等待...
  • 若作业在处理机上按单道方式运行,且作业按响应比搞着优先调度算法,进程按先来先服务算法,试写出作业的执行顺序,计算响应比,作业的周转时间和平均周转时间 作业 进入输入井时间 计算时间 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 571,534
精华内容 228,613
关键字:

响应比是什么