G
GGCAT
Unregistered / Unconfirmed
GUEST, unregistred user!
就象CPU 的CACHE一样。 ,通过一次一次的查询更新缓冲,使之接近
优化状态。我使用了书上的 FIFO,LRU,LFU 等方法,都不是很理想,哪位有
好的想法,请不吝赐教。
输入端每秒输入约4000个数据块, 每个数据块的长度在 512 Byte 到 2048 Byte 不等
我对这些数据块加工(比较耗费时间)后送往输出端。 实际上,有很多数据块是会重
复的。 为了减少加工负担,我在输入和处理之间加入了一定容量的缓冲。这样,在处
理数据时我就先在缓冲中查看有没有处理过,如果在缓冲中,就直接送出结果数据,否
则再处理,然后把当前数据块放入缓冲。 我要解决的问题是如何进行缓冲区内容的更新,
才能达到比较高的缓冲命中率。 伪代码如下:
While Not EndOfDatado
begin
Data:=GetNextData;
//获取下一输入块
CacheHit:= SearchInCache(Data);
//在缓冲中查找
IF CacheHit>0
then
OutPut(CacheList[CacheHit].Result) //命中则直接出结果
else
begin
Result:=DataProcess(Data);
//未命中先处理
OutPut(Result);
//输出结果
CacheUpdate(Data,Result);
*****更新缓冲内容****
end;
end;
问题就在 如何优化地更新缓冲内容,书上的FIFO,LRU,LFU都不理想
优化状态。我使用了书上的 FIFO,LRU,LFU 等方法,都不是很理想,哪位有
好的想法,请不吝赐教。
输入端每秒输入约4000个数据块, 每个数据块的长度在 512 Byte 到 2048 Byte 不等
我对这些数据块加工(比较耗费时间)后送往输出端。 实际上,有很多数据块是会重
复的。 为了减少加工负担,我在输入和处理之间加入了一定容量的缓冲。这样,在处
理数据时我就先在缓冲中查看有没有处理过,如果在缓冲中,就直接送出结果数据,否
则再处理,然后把当前数据块放入缓冲。 我要解决的问题是如何进行缓冲区内容的更新,
才能达到比较高的缓冲命中率。 伪代码如下:
While Not EndOfDatado
begin
Data:=GetNextData;
//获取下一输入块
CacheHit:= SearchInCache(Data);
//在缓冲中查找
IF CacheHit>0
then
OutPut(CacheList[CacheHit].Result) //命中则直接出结果
else
begin
Result:=DataProcess(Data);
//未命中先处理
OutPut(Result);
//输出结果
CacheUpdate(Data,Result);
*****更新缓冲内容****
end;
end;
问题就在 如何优化地更新缓冲内容,书上的FIFO,LRU,LFU都不理想