class server//创???建?§服¤t务?器??的ì?类¤¨¤
{
public:
server()//服¤t务?器??类¤¨¤构1造¨?函?¥数oy
{
surplus_cpu=1;//初?始o?化?¥剩o?ê余?¨¤CPU为a1
surplus_memory=1;//初?始o?化?¥剩o?ê余?¨¤内¨2存??为a1
}
bool is_full()//判D断?服¤t务?器??是o?否¤?已°?满¨2
{
if(surplus_memory<=0.0005||surplus_cpu<=0.00005)//取¨?值|ì为a两¢?属o?性?最á?小?值|ì
return 1;
else
return 0;
}
bool overstep(double cpu,double memory)//判D断?是o?否¤?能¨1将?进?程¨?放¤?入¨?服¤t务?器??中D
{
if(surplus_cpu-cpu>=0&&surplus_memory-memory>=0)
return 1;
else
return 0;
}
double is_fit(double cpu,double memory)//判D断?最á?合?适o¨o服¤t务?器??的ì?进?程¨?
{
e_percent=surplus_cpu*cpu+surplus_memory*memory;//计?算?进?程¨?向¨°量¢?的ì?内¨2积y
return e_percent;//向¨°量¢?内¨2积y
}
void lead_in(double cpu,double memory)//将?进?程¨?放¤?入¨?服¤t务?器??中D
{
surplus_cpu=cpu;
surplus_memory=memory;//剩o?ê余?¨¤memory减?少|¨′
};
~server()
{
quantity++;//一°?次??析?构1代?¨2表à¨a用??完a¨o一°?个?服¤t务?器??,ê?建?§立¢?é在¨2动?¥态??分¤?配?的ì?基¨′础??上|?
}
static int quantity;//服¤t务?器??数oy量¢?
private:
double surplus_cpu;
double surplus_memory;
double e_percent;//向¨°量¢?内¨2积y
};
【源文件】
#include<iostream>
#include"server.h"
#include<fstream>
int server::quantity=0;
using namespace std;
int main()
{
double data[1000][3];//创???建?§容¨Y纳¨|进?程¨?的ì?二t维?数oy组á¨|
ifstream infile;
infile.open("1000个?进?程¨?CPU和¨a内¨2存??占?用??量¢?.Txt");//打?¨°开a数oy据Y文?件t
if(!infile.is_open())
{
cout<<"文?件t打?¨°开a失o?ì败?¨1"<<endl;//检¨?测a文?件t是o?否¤?打?¨°开a
return 0;
}
for(int i=0;i<1000;i++)
{
for (int j=0;j<3;j++)
infile>>data[i][j];
};
infile.close();
server*x=new server();//创???建?§一°?个?服¤t务?器??
for(int k=0;k<1000;k++)//从?¨?第ì¨2一°?个?进?程¨?开a始o?遍à¨|历¤¨2
{
if(x->is_full())//检¨?测a服¤t务?器??是o?否¤?已°?满¨2
{
delete x;
server*x=new server();
}
double max_m=0;
int max_l=0;
for(int l=k;l<1000;l++)//开a始o?寻??找¨°内¨2积y最á?大?¨?的ì?进?程¨?
{
if(x->overstep(data[l][1],data[l][2]))//判D断?进?程¨?能¨1否¤?放¤?入¨?进?程¨?内¨2
{
double m=x->is_fit(data[l][1],data[l][2]);//得ì?出?内¨2积y
if(m>max_m)//比ਨ较?大?¨?小?
{
max_m=m;
max_l=l;
}
}
if(max_l!=-1)//有?D进?程¨?能¨1够?放¤?到ì?服¤t务?期¨2内¨2
{
x->lead_in(data[max_l][l],data[max_l][2]);
cout<<data[max_l][0]<<"";//被à?注á?é释o¨a掉ì?的ì?调ì??试o?信?息?é
for(int a=0;a<3;a++)//将?使o1用??过y的ì?进?程¨?放¤?到ì?前??面?去¨£¤
data[max_l][a]=data[k][a];
}
else//没?有?D进?程¨?能¨1够?放¤?到ì?服¤t务?器??内¨2
{
delete x;//下?一°?个?服¤t务?器??
cout<<endl;//被à?注á?é释o¨a掉ì?的ì?调ì??试o?信?息?é
server*x=new server();
k--;//重?新?遍à¨|历¤¨2上|?一°?个?进?程¨?
}
}
delete x;
cout<<endl;//被à?注á?é释o¨a掉ì?的ì?调ì??试o?信?息?é
cout<<"使o1用??服¤t务?器??数oy量¢?的ì?一°?个?较?小?值|ì为a:"<<server::quantity<<"个?"<<endl;
return 0;
}
版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。