Add the protocol-comparison module
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
package com.ankurm.protocols;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/** Latency bookkeeping, kept in one place so the three protocols are measured identically. */
|
||||
final class Bench {
|
||||
|
||||
private final long[] nanos;
|
||||
private int i;
|
||||
|
||||
Bench(int n) {
|
||||
this.nanos = new long[n];
|
||||
}
|
||||
|
||||
void record(long ns) {
|
||||
nanos[i++] = ns;
|
||||
}
|
||||
|
||||
/** p50, p99 and mean in microseconds, plus calls per second derived from the mean. */
|
||||
String summary(String label) {
|
||||
long[] sorted = Arrays.copyOf(nanos, i);
|
||||
Arrays.sort(sorted);
|
||||
double p50 = sorted[(int) (sorted.length * 0.50)] / 1000.0;
|
||||
double p99 = sorted[(int) (sorted.length * 0.99)] / 1000.0;
|
||||
double mean = Arrays.stream(sorted).average().orElse(0) / 1000.0;
|
||||
return String.format("%-12s n=%-6d p50=%8.1f us p99=%9.1f us mean=%8.1f us ~%,.0f calls/s",
|
||||
label, sorted.length, p50, p99, mean, 1_000_000.0 / mean);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user