zoukankan      html  css  js  c++  java
  • 今天做了一个很糟糕的storage and buffer manager

    初步分析是LRE-2算法的问题,

    while(pt->less_recent != NULL && b > pt->less_recent->b2dist)
    这步判断耗时较多。。必须要修改。。。暂时无解。。
    void BMgr::LRU2(BCB * ptr, int frid)
    {
        if(mru == NULL)
      {
        mru = new LRUEle();
        mru->fid = frid;
        mru->less_recent = NULL;
        mru->more_recent = NULL;
        if(ptr->stime != -1)
        {
          mru->b2dist = (ptr->stime-ptr->ftime);
    
        }
        else
        {
          mru->b2dist = -1;
        }
        lru = mru;  
      }
    
      else
      {
    
        double b = 0.0;
        if(ptr->stime != -1)
        {
          b = ptr->stime - ptr->ftime;
        }
    
        else
        {
          b = -1;
        }
        LRUEle * pt = mru;
    
        if(b == -1)
        {
    
          while(pt->less_recent != NULL && pt->less_recent->b2dist != -1)
          {
            pt = pt->less_recent;
          }
    
          if(pt->less_recent == NULL)
          {
    
            pt->less_recent = new LRUEle();
            pt->less_recent->more_recent = pt;
            pt = pt->less_recent;
            pt->fid = frid;
            pt->less_recent = NULL;
            pt->b2dist = b;
    
            lru = pt;
          }
    
          else
          {
    
            LRUEle * temp = new LRUEle();
            temp->fid = frid;
            temp->b2dist = b;
            temp->less_recent = pt->less_recent;
            temp->more_recent = pt;
    
            pt->less_recent->more_recent = temp;
            pt->less_recent = temp;
          }
        }
    
        else
        {
    
          while(pt->less_recent != NULL && b > pt->less_recent->b2dist)
          {
            pt = pt->less_recent;
          }
    
          if(pt->less_recent == NULL)
          {
    
            pt->less_recent = new LRUEle();
            pt->less_recent->more_recent = pt;
            pt = pt->less_recent;
            pt->b2dist = b;
            pt->fid = frid;
            pt->less_recent = NULL;
    
            lru = pt;
          }
    
          else
          {
    
            LRUEle * temp = new LRUEle();
            temp->b2dist = b;
            temp->fid = frid;
            temp->less_recent = pt->less_recent;
            temp->more_recent = pt;
    
            pt->less_recent->more_recent = temp;
            pt->less_recent = temp;
          }
        }
      }
    }
  • 相关阅读:
    代码发布概述图
    gitPython模块
    django重点面试题
    paramiko模块
    Spring Security 注解
    JsonIgnoreProperties JsonIgnore导致RequestBody无法接受参数值
    Http和Rpc区别
    ExceptionHandler(思路参考CustomException)
    Linux安装Nginx
    秒杀扣除库存方案
  • 原文地址:https://www.cnblogs.com/akira90/p/2761083.html
Copyright © 2011-2022 走看看