我正在研究一个包含固定大小的缓冲区类型(FIFO)的项目:首先输入首先输出,客户端将请求发送到该缓冲区,系统处理它们。当缓冲区已满时,我必须应用以下重载策略之一(删除策略):
DRPH:从缓冲区的头部删除一个请求。
DRPT:从buffer的尾部删除一个Request。
DRPR:随机删除缓冲区中25%的元素。
block :阻塞新的连接直到缓冲区中有空间可用。
我做了一个模拟,通过每秒发送许多请求和测量响应时间来测量Httperf的性能,但是我得到的响应时间值不稳定,特别是当请求数量很大时。所以通过模拟我不能得到最好的掉落策略。我重复了很多次模拟,每次我都得到不同的值。
问题是:
理论上,在上述策略中,最佳的缓冲区管理删除策略是什么?.
这当然取决于您的数据和所需的顺序。但通常,使用FIFO,缓冲区末尾的数据是最旧的,因此最不可能再次需要的数据。所以DRPR可能是最好的解决方案。但前提是你可以承受数据丢失(例如,因为它可以在以后重新插入)。如果不是这种情况,您必须阻塞连接,直到缓冲区空间再次可用。
另一件事:我会争取一个动态缓冲区。从一个合理的默认大小开始,看看它有多快被填满。在一定速率以上增加缓冲区大小(在一定阈值以下,您可以再次降低它),直到一定的最大值。