将自适应或优化内存策略包含到库中是否可行?

时间:2009-10-31 07:23:13

标签: buffer

我有一个执行I / O的库。有几个外部旋钮用于调整内部使用的内存缓冲区的大小。当我运行一些测试时,我发现缓冲区的大小会显着影响性能。

但最佳尺寸似乎取决于一堆东西 - PC上的可用内存,正在处理的文件的大小(从非常小到大),文件数量,输出速度流相对于输入流,我不知道还有什么。

在库中构建自适应内存策略是否有意义?或者它是否更好地发挥作用,并让图书馆的用户弄清楚要使用什么?

有没有人这样做过 - 这有多难?它有效吗?

考虑到不同的缓冲区大小,我认为库可以跟踪各种操作所需的时间,然后它可以做出关于哪个大小最佳的一些决定。我可以想象让库在初始I / O轮次中通过各种缓冲区大小进行旋转......然后它最终将根据结果进行计算并在未来轮次中调整缓冲区大小。但那么,多久重新检查一次?多久调整一次?

1 个答案:

答案 0 :(得分:2)

自适应方法有时被称为“自主”,使用人类自主神经系统的类比:你不会有意识地控制你的心率和呼吸,你的自主神经系统会这样做。

你可以阅读其中一些herehere(对插头道歉,但我想表明这个概念正在被认真对待,并在真实产品中体现出来。)< / p>

我使用试图做到这一点的产品的经验是,它们确实能够正常工作,但却会让我感到不快:那是因为他们倾向于采取“父亲最了解”的方法。你做了一些(你相信)你的应用程序的小变化,或环境和未预料到的事情发生。你不知道为什么,你不知道它是否好。所以我的自治规则是:

  

告诉我你在做什么,为什么

现在有时基础数学非常复杂 - 考虑到一些自主系统正在发展趋势并因此做出预测性变化(这种类型的请求数量增加,让我们提供更多资源X),因此数学模型非常重要。因此,并不总是能够提供简单的解释。然而,对观看人类的某种程度的反馈可以让人放心。