实验六总结

1实验目标概述
本次实验训练学生的并行编程的基本能力,特别是 Java 多线程编程的能力。 根据一个具体需求,开发两个版本的模拟器,仔细选择保证线程安全(threadsafe) 的构造策略并在代码中加以实现,通过实际数据模拟,测试程序是否是线程安全 的。另外,训练学生如何在 threadsafe 和性能之间寻求较优的折中,为此计算吞 吐率和公平性等性能指标,并做仿真实验。 ⚫ Java 多线程编程 ⚫ 面向线程安全的 ADT 设计策略选择、文档化 ⚫ 模拟仿真实验与对比分析

自己绘制的猴子生成器流程图:
在这里插入图片描述
以及猴子生成器的代码:
public void cross(int ID, int methods, int MV, Map<Integer, Ladder> ladders, int time, Logger log,
List theover, JTextArea ta) throws SyntaxErrorException {
Monkey monkey = monkeymakers.makemonkey(ID, methods, MV);
MonkeysCross monkeysCross =
new MonkeysCross(monkey, ladders, methods, time, log, MV, theover, ta);
(new Thread(monkeysCross)).start();
}
猴子上桥时会选择策略:
在我们的实验中至少两种“梯子选择”策略的设计与实现方案
策略1:有空桥就上,没空桥等着
策略2: 有空桥就上,然后,没空桥选择,一个上面猴子距离自己最远(或最近)的桥上,当自己猴子的速度过小时选择桥上猴子距离自己近的,当自己速度大时选择桥上猴子距离自己远的。

如何确保threadsafe?
使用线程安全的数据类型,在进行读写的时候上锁,使用同步方法,尽量保证读写的一致
系统吞吐率和公平性的度量方案
计算并输出本次仿真的吞吐率和公平性。 ⚫ “吞吐率”是指:假如?只猴子过河的总耗时为?秒,那么每只猴子的 平均耗时为? = ? ?秒,则吞吐率?ℎ = ? ?表征每秒钟可过河的猴子数目。 ⚫ “公平性”是指:如果 Monkey 对象 A 比 B 出生得早,那么 A 应该不 晚于 B 抵达对岸,则为“公平”;若 A 比 B 晚到对岸,则为“不公 平”。设 A 和 B 的产生时间分别为??和??,抵达对岸的时间分别为?? 和??,那么公平性?(?, ?) = { 1, ?? (?? − ?? ) ∗ (?? − ?? ) ≥ 0 −1, ??ℎ?????? 。对? 只猴子两两计算其之间的公平性并综合到一起,得到本次模拟的整体 公平性? = ∑ ?(?,?) (?,?)∈Θ C? 2 , Θ = {(?, ?)|? ≠ ?, (?, ?) ∉ Θ},其取值范围 为[−1,1]。

3.7输出方案设计
日志:
在这里插入图片描述GUI:
在这里插入图片描述

参数如何初始化
Main()为了方便测试,所有的参数(包括选择的策略号)都在主函数中自定义,然后传入猴子构造器里。
Main2()中由控制台输入
Main3()使用了文件输入
使用Strategy模式为每只猴子选择决策策略
在这里插入图片描述
在这里插入图片描述

猴子过河模拟器v2
在不同参数设置和不同“梯子选择”模式下的“吞吐率”和“公平性”实验结果及其对比分析。
对比分析:固定其他参数,选择不同的决策策略
int t = 2;// 时间间隔
int k = 3;// 一次生产几个
int N = 20;// 总共生产几个
int MV = 5;// 最大速度
int n = 5;// 桥的数目
int h = 20;// 桥的长度
策略1:
(1):吞吐率是0.5714285714285714 公平性是0.9894736842105263
(2):吞吐率是0.5714285714285714 公平性是0.8105263157894737
(3):吞吐率是0.5882352941176471 公平性是0.9578947368421052
(4):吞吐率是0.5714285714285714 公平性是0.9263157894736842
(5):吞吐率是0.5714285714285714 公平性是0.8631578947368421

策略2:
(1)吞吐率是0.5128205128205128 公平性是0.9157894736842105
(2)吞吐率是0.5555555555555556 公平性是0.8631578947368421
(3)吞吐率是0.625 公平性是0.8421052631578947
(4)吞吐率是0.6060606060606061 公平性是1.0
(5)吞吐率是0.6060606060606061 公平性是0.8315789473684211
可以看出:吞吐率是与策略有关的,,策略1由于是使用了,没桥就等着的原则所以比较慢,但是吞吐率较为稳定,策略二则是使用了没空桥就找一个合适的上,这个合适的只是在当时所有的可以上的桥中比较出来的,所以虽然快,但是并不稳定。
而公平性与其说是取决于策略,不如说是取决于随机生成的数字,与线程执行顺序的关系,因为,两个策略的公平性波动都不小。

对比分析:变化某个参数,固定其他参数
固定其他参数改变桥的个数:
桥数1:
(1):吞吐率是0.37037037037037035 公平性是0.6842105263157895
(2):吞吐率是0.40816326530612246 公平性是0.968421052631579
(3):吞吐率是0.38461538461538464 公平性是0.8315789473684211
桥数4:
(1)吞吐率是0.6060606060606061 公平性是1.0
(2)吞吐率是0.6060606060606061 公平性是0.6526315789473685
(3)吞吐率是0.5714285714285714 公平性是0.5157894736842106
桥数:5
(1)吞吐率是0.6451612903225806 公平性是0.9578947368421052
(2)吞吐率是0.6060606060606061 公平性是0.9157894736842105
(3)吞吐率是0.6666666666666666 公平性是1.0
桥数6:
(1)吞吐率是0.625 公平性是1.0
(2)吞吐率是0.6451612903225806 公平性是0.8736842105263158
(3)吞吐率是0.5714285714285714 公平性是0.9263157894736842
总体来说:桥越多吞吐率越大,而公平性虽然跟桥的数量有关,桥越多越公平,
单是主要影响因素还是随机数的产生,桥数目的影响不是那麽大。
分析:吞吐率是否与各参数/决策策略有相关性?
可以看出:吞吐率是与策略有关的,,策略1由于是使用了,没桥就等着的原则所以比较慢,但是吞吐率较为稳定,策略二则是使用了没空桥就找一个合适的上,这个合适的只是在当时所有的可以上的桥中比较出来的,所以虽然快,但是并不稳定。

3.9.4压力测试结果与分析
在这里插入图片描述
1.生产大量的猴子,时间间隔缩短,产生个数增加:
吞吐率是1.4184397163120568
公平性是0.2951758793969849
当产生这样的变化时,由于产生密集,吞吐率会上升,但是公平性会下降。
在这里插入图片描述
2.增加猴子速度的上限制,为了能体现差异,也增加桥长度(同时乘以10)。
吞吐率是0.28776978417266186
公平性是0.34102564102564104
由于速度差异过大,使公平性降低,且,桥更长了,当随机到的速度很小时会耗费相当长的时间,所以吞吐率也下降。

猴子过河模拟器v3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值