在Java Concurency in Practice中,您可以找到以下直方图(12.3):
X轴(水平)有图例:
每线程完成时间
。
和Y轴有传奇
线程数
在相关文本中,作者解释了 variance 。据我所知,如果我进行大量执行相同工作和最佳结果的实验 - 1秒,最差的结果 - 5秒,然后方差 - 4秒。
实际上我无法理解这个直方图。
从书中引用:
图12.3显示了变体的perͲtask完成时间 TimedPutTakeTest使用缓冲区大小为1000,其中每个256 并发任务只为非公平(阴影条)迭代1000项 和公平的信号量(空心酒吧)。 (第13.3节解释了公平对比 锁定和信号量的非公平排队。)完成时间 非公平的信号量范围从104到8,714 ms ,是一个因素 八十。通过强制更公平可以减小这个范围 在并发控制中;这在BoundedBuffer中很容易做到 将信号量初始化为公平模式。如图12.3所示,这个 成功地大大减少了方差(现在只是从 38,194到38,207毫秒),但不幸的是也大大减少了 吞吐量。 (更长的运行测试,具有更典型的任务类型 可能会显示更大的吞吐量减少。)
你能解释一下作者在哪里找到104和8.714的数字吗?
答案 0 :(得分:0)
方差是统计学中的一个概念,它解释了数据的可变性。因此,从图表中可以清楚地看出,非公平信号量具有广泛的完成时间(=方差),公平信号量具有较小的方差(因此所有完成时间大致相同)。
数字104(0.1秒)和8714(8.7秒)相应地是图像上最左边和最右边的灰色条。
因此,实验需要多个线程并对公平和非公平的信号量执行一次计时测试多次,将总时间/线程数作为图表上的条形图,然后重复实验不同的线程数。