@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.SampleTime)
@Warmup(iterations = 5)
@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS)
@Threads(20)
@Fork(1)
@State(Scope.Benchmark)
public class CASBench {
private AtomicInteger atomicInteger = new AtomicInteger(0);
private int a = 0;
@Benchmark
public void cas() throws Exception {
int i;
do {
i = atomicInteger.get();
} while (!atomicInteger.compareAndSet(i, i + 1));
}
@Benchmark
public void sync() {
synchronized (this) {
a++;
}
}
}
测试结果不太看得懂,不管测试对不对,求大大分析下测试结果
# Fork: 1 of 1
# Warmup Iteration 1: 0.013 ±(99.9%) 0.002 ms/op
# Warmup Iteration 2: 0.013 ±(99.9%) 0.002 ms/op
# Warmup Iteration 3: 0.013 ±(99.9%) 0.002 ms/op
# Warmup Iteration 4: 0.011 ±(99.9%) 0.002 ms/op
# Warmup Iteration 5: 0.015 ±(99.9%) 0.002 ms/op
Iteration 1: 0.012 ±(99.9%) 0.001 ms/op 这是每个操作的平均值吗?
sync·p0.00: ≈ 10⁻⁶ ms/op
sync·p0.50: ≈ 10⁻⁴ ms/op
sync·p0.90: 0.001 ms/op
sync·p0.95: 0.001 ms/op
sync·p0.99: 0.159 ms/op
sync·p0.999: 0.737 ms/op
sync·p0.9999: 20.054 ms/op 这个和后面的是什么意思啊,而且差距好大?
sync·p1.00: 64.160 ms/op
.....
Benchmark Mode Cnt Score Error Units
CASBench.cas sample 32574554 0.004 ± 0.001 ms/op
CASBench.cas:cas·p0.00 sample ≈ 10⁻⁶ ms/op
CASBench.cas:cas·p0.50 sample ≈ 10⁻⁴ ms/op
CASBench.cas:cas·p0.90 sample 0.001 ms/op
CASBench.cas:cas·p0.95 sample 0.001 ms/op
CASBench.cas:cas·p0.99 sample 0.002 ms/op
CASBench.cas:cas·p0.999 sample 0.004 ms/op
CASBench.cas:cas·p0.9999 sample 0.221 ms/op
CASBench.cas:cas·p1.00 sample 104.595 ms/op
CASBench.sync sample 27044931 0.012 ± 0.001 ms/op
CASBench.sync:sync·p0.00 sample ≈ 10⁻⁶ ms/op
CASBench.sync:sync·p0.50 sample ≈ 10⁻⁴ ms/op
CASBench.sync:sync·p0.90 sample 0.001 ms/op
CASBench.sync:sync·p0.95 sample 0.001 ms/op
CASBench.sync:sync·p0.99 sample 0.104 ms/op
CASBench.sync:sync·p0.999 sample 1.071 ms/op
CASBench.sync:sync·p0.9999 sample 20.185 ms/op
CASBench.sync:sync·p1.00 sample 69.992 ms/op
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.