Skip to content

Instantly share code, notes, and snippets.

@yamanyar
Created December 15, 2020 16:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yamanyar/b7453335238a683e2a5b681dd34a9850 to your computer and use it in GitHub Desktop.
Save yamanyar/b7453335238a683e2a5b681dd34a9850 to your computer and use it in GitHub Desktop.
ReentrantReadWriteLock performance check
package samples;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Threads;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/*
Benchmark (cpuLoad) Mode Cnt Score Error Units
KaanLocks.Base 1 thrpt 5 1209951860,667 ± 147478517,218 ops/s *Empty method
KaanLocks.Read 1 thrpt 5 6105588,343 ± 49726,915 ops/s
KaanLocks.Write 1 thrpt 5 38715891,117 ± 4604324,819 ops/s *Write performs better
KaanLocks.Base 8192 thrpt 5 441840,951 ± 23352,241 ops/s *Empty method
KaanLocks.Read 8192 thrpt 5 441382,140 ± 27211,750 ops/s *Read performs better
KaanLocks.Write 8192 thrpt 5 66773,876 ± 9424,958 ops/s
*/
public class KaanLocks {
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(KaanLocks.class.getSimpleName())
.forks(1)
.build();
new Runner(opt).run();
}
@Benchmark
@Threads(16)
public void Write(MyState m) {
try {
m.write.lock();
Blackhole.consumeCPU(m.cpuLoad);
} finally {
m.write.unlock();
}
}
@Benchmark
@Threads(16)
public void Base(MyState m) {
try {
Blackhole.consumeCPU(m.cpuLoad);
} finally {
//
}
}
@Benchmark
@Threads(16)
public void Read(MyState m) {
try {
m.read.lock();
Blackhole.consumeCPU(m.cpuLoad);
} finally {
m.read.unlock();
}
}
@State(Scope.Benchmark)
public static class MyState {
@Param({"1", "8192"})
public int cpuLoad;
ReentrantReadWriteLock rw = new ReentrantReadWriteLock();
Lock read = rw.readLock();
Lock write = rw.writeLock();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment