zoukankan      html  css  js  c++  java
  • 论大缓存操作

    论大缓存操作

    我们经常要在内存中搬迁大数据(可能几G,甚至更大)。如果一次性地开辟几G的缓存,想一次就完成大数据的搬迁,这几G的缓存很可能超过了系统的物理内存,这时会造成服务器卡死。鉴于此,大数据如此搬迁,是行不通的。当然小数据这样,是没有问题的。

    那么,如何完成大数据通过缓存实现搬迁?

    正确答案是——蚂蚁搬家。一次搬一点,分成N次搬完。

    将这个问题进一步引申,网络通信,通过流传输大数据,试图通过网络,一次传输完大数据,会造成网路堵塞,因此网络传输,也应该是蚂蚁搬家。

    再说点题外话,有时我们让程序SLEEP(指定时间),等待程序的执行结果。如果这个SLEEP时间较大,程序就会因睡眠而长时间无反应,其实可以分成较小的SLEEP时间,分成N次执行,一旦程序已经有了执行结果,就立即终止SLEEP。

    综上所述,不论是大数据、还是长时间,只要是大任务,我们都应该分割成N个小任务来执行。这就是道。

    DELPHI的流类的一个方法为我们作了最好的阐述。附上源码:

    function TStream.CopyFrom(const Source: TStream; Count: Int64): Int64;
    const
      MaxBufSize = $F000;
    var
      BufSize, N: Integer;
      Buffer: TBytes;
    begin
      if Count <= 0 then
      begin
        Source.Position := 0;
        Count := Source.Size;
      end;
      Result := Count;
      if Count > MaxBufSize then BufSize := MaxBufSize else BufSize := Count;
      SetLength(Buffer, BufSize);
      try
        while Count <> 0 do
        begin
          if Count > BufSize then N := BufSize else N := Count;
          Source.ReadBuffer(Buffer, N);
          WriteBuffer(Buffer, N);
          Dec(Count, N);
        end;
      finally
        SetLength(Buffer, 0);
      end;
    end;
    

      

  • 相关阅读:
    兼容多浏览器的网页复制插件(ZeroClipboard)
    兼容主流浏览器的css渐变色
    如何让字体随窗口缩放自动调整大小
    使用javascript实现html页面直接下载网盘文件
    360随身wifi隐藏ssid方法
    javascript特效——烟花燃放的效果[xyytit]
    JavaScript数组定义
    常用特殊符号的HTML代码(HTML字符实体)
    9.JAVA之GUI编程列出指定目录内容
    8.JAVA之GUI编程键盘码查询器
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9649823.html
Copyright © 2011-2022 走看看