我正在使用JMH對自定義集合實現運行性能測試。JMH中的非對稱基準測試
我想模仿一個場景,其中讀取次數比寫入次數大10倍。
我用this不對稱基準實例和創建一組具有10個讀取器線程和1個寫線程:
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Group("g0")
@GroupThreads(1)
public void baselinePut0(CacheState0 state) { writing }
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Group("g0")
@GroupThreads(10)
public Integer baselineGet0(CacheState0 state) { reading }
我運行-wi 10 -i 10 -f 1
PARAMS測試。在報告中,變量cnt
所有的基準是一樣的:
Benchmark Mode Cnt Score Error Units
Benchmark.g0 avgt 10 262,537 ? 215,406 us/op
Benchmark.g0:baselineGet0 avgt 10 2,101 ? 0,154 us/op
Benchmark.g0:baselinePut0 avgt 10 1252,231 ? 697,807 us/op
這是不是意味着大量的讀取等於在實驗中寫的是多少?如果是這樣,如何正確實施?更一般的說法是:我在這個設置中錯過了什麼?
除非你真的* *需要獲得獨立的測量爲讀/寫,我寧願用對稱的(隨機)測試拋出去ThreadLocalRandom支持的骰子是否應該讀取或寫入。這樣您就更加仔細地平衡了操作組合,並且不依賴於線程調度。你不能在可以容納11個正在運行的線程的機器上運行,而不會相互踩踏,是嗎? ;) –