计算机网络相关,设计一个三队列一服务站的模型,三队列发包符合泊松分布,服务站对每个包有一定的服务速率,包的大小也符合泊松分布。
问题分析:如果采用实时模型,计算机内部的调度算法会占用一部分时间,导致实验结果不准确,因此采用时间轴的方法来模拟实时的发包和处理包的过程。
首先拟采用带赤字的时间片模型,三个基站持续按照泊松分布向三个队列发包,服务器采用一定的时间片,对三个队列进行轮询,每次对一个队列的服务时间不超过一个时间片。
实现方法:首先创建三个队列,运行生产(发包)程序,在队列中存储一定数量的pack对象,此时按照泊松分布为每个pack赋予到达时间属性。 然后运行消费(服务)程序,计算并且输出结果,在运行过程中,消费(服务)程序维护一个时间轴变量,以对pack的时间属性进行判断(这就是问题分析中描述的时间轴方法)。
代码如下:(为防止山东大学刘磊老师的学生们不自己思考直接copy,包含一些小错误,不过能运行)
pack:
public class pack {
public int index;
public double comeTime;
public double leafTime;
public double servTime;
public double waitTime;
public pack(int index) {
this.index = index;
}
public void CalLeaf(double tt) {
waitTime = (tt - comeTime); //暂定为这样把,实际应该传入
}
}
Prod:
import java.util.ArrayList;
public class Prod {
int index;
double lamda;
ArrayList<pack> queue;
int length;
double currentTime; //用于记录当前时间线
public ArrayList<Integer> lengthDis;
public Prod(double lamda) {
this.lamda = lamda;
queue = new ArrayList<pack>();
lengthDis = new ArrayList<Integer>();
}
public Prod(int index,double lamda) {
this.index = index;
this.lamda = lamda;
queue = new ArrayList<pack>();
lengthDis = new ArrayList<Integer>();
}
public void getLength() {