作业小结2
第五次作业 多线程电梯
设计策略
构造两个队列,PendingRequestList和ProcessedRequestList。 PendingRequestList:已经输入的未被调度的请求队列。 ProcessedRequestList:已经被调度和分配的请求队列,每个电梯都有一个这样的队列,电梯会按照这个队列的顺序来执行任务。 时间处理: 每个电梯记录nextRequest、nextTime;、requestTime,分别代表正在执行的请求是哪个,到达下一楼层的时刻(系统时间),执行完下一个请求的时刻(系统时间)。 每一次,电梯会sleep一定时间,这个时间通过计算得出:用nextTime - currentSystemTime - 500(前提是这个值是正数的情况下,会先用if来判断一下),之后在循环判断System是不是大于等于nextTime,如果是,表明到达新的楼层,执行相应的操作。 另外,如果nextTime == requestTime,则表明这个请求处理完毕,还是去队列中获得新的请求来执行。 如果nextRequest与本电梯对应的ProcessedRequestList.first不同,表明在请求队列中的列首插入了一个捎带请求,这可以很方便的监测到,之后执行一些修改requestTime、nextRequest之类的操作。 这样做的好处是,电梯时间的误差非常非常小,甚至可以说是没有误差(当CPU运行情况良好时)。
程序结构
class |
Cyclic |
Dcy |
Dcy* |
Dpt |
Dpt* |
top.buaaoo.gitlab.Direction |
0.0 |
0.0 |
0.0 |
7.0 |
10.0 |
top.buaaoo.gitlab.Elevator |
4.0 |
5.0 |
12.0 |
3.0 |
4.0 |
top.buaaoo.gitlab.Elevator.STATE |
0.0 |
0.0 |
0.0 |
2.0 |
5.0 |
top.buaaoo.gitlab.ElevatorRequest |
2.0 |
2.0 |
3.0 |
3.0 |
9.0 |
top.buaaoo.gitlab.FloorRequest |
2.0 |
2.0 |
3.0 |
3.0 |
9.0 |
top.buaaoo.gitlab.Input |
4.0 |
4.0 |
12.0 |
1.0 |
4.0 |
top.buaaoo.gitlab.PendingRequestList |
0.0 |
4.0 |
4.0 |
4.0 |
5.0 |
top.buaaoo.gitlab.ProcessedRequestList |
0.0 |
2.0 |
4.0 |
2.0 |
5.0 |
top.buaaoo.gitlab.Request |
2.0 |
3.0 |
3.0 |
9.0 |
9.0 |
top.buaaoo.gitlab.Scheduler |
4.0 |
10.0 |
12.0 |
2.0 |
4.0 |
top.buaaoo.gitlab.Scheduler_ALS |
4.0 |
4.0 |
12.0 |
1.0 |
4.0 |
top.buaaoo.gitlab.Scheduler_FOOL |
4.0 |
3.0 |
12.0 |
1.0 |
4.0 |
Total |
|
|
|
|
|
Average |
2.1 |
3.25 |
6.41 |
3.16 |
6.0 |
method |
ev(G) |
iv(G) |
v(G) |
top.buaaoo.gitlab.Elevator.changeRequest(long) |
3.0 |
6.0 |
8.0 |
top.buaaoo.gitlab.Elevator.Elevator(int,ProcessedRequestList) |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Elevator.getDirection() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Elevator.getFloor() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Elevator.getMileage() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Elevator.getState() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Elevator.output(long) |
1.0 |
2.0 |
2.0 |
top.buaaoo.gitlab.Elevator.run() |
4.0 |
13.0 |
20.0 |
top.buaaoo.gitlab.Elevator.start() |
1.0 |
2.0 |
2.0 |
top.buaaoo.gitlab.ElevatorRequest.ElevatorRequest(long,String,int,int) |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.ElevatorRequest.getDirection() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.ElevatorRequest.getFloor() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.ElevatorRequest.getId() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.FloorRequest.FloorRequest(long,String,int,Direction) |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.FloorRequest.getDirection() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.FloorRequest.getFloor() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.FloorRequest.getId() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Input.addRequest(long,String[],int) |
1.0 |
9.0 |
10.0 |
top.buaaoo.gitlab.Input.errorInfo(String) |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Input.Input(PendingRequestList) |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.Input.run() |
5.0 |
8.0 |
10.0 |
top.buaaoo.gitlab.Input.start() |
1.0 |
2.0 |
2.0 |
top.buaaoo.gitlab.PendingRequestList.addRequest(long,String,int,int,int) |
3.0 |
1.0 |
3.0 |
top.buaaoo.gitlab.PendingRequestList.addRequest(long,String,int,int,String) |
3.0 |
1.0 |
4.0 |
top.buaaoo.gitlab.PendingRequestList.getFirst() |
1.0 |
1.0 |
1.0 |
top.buaaoo.gitlab.PendingRequestList.getLas |