diff --git a/BitFaster.Caching.UnitTests/Concurrent/StripedLongAdderTests.cs b/BitFaster.Caching.UnitTests/Counters/StripedLongAdderTests.cs similarity index 67% rename from BitFaster.Caching.UnitTests/Concurrent/StripedLongAdderTests.cs rename to BitFaster.Caching.UnitTests/Counters/StripedLongAdderTests.cs index adbdf6a0..4d5e0fef 100644 --- a/BitFaster.Caching.UnitTests/Concurrent/StripedLongAdderTests.cs +++ b/BitFaster.Caching.UnitTests/Counters/StripedLongAdderTests.cs @@ -1,32 +1,32 @@ using System.Threading.Tasks; -using BitFaster.Caching.Concurrent; +using BitFaster.Caching.Counters; using FluentAssertions; using Xunit; -namespace BitFaster.Caching.UnitTests.Concurrent +namespace BitFaster.Caching.UnitTests.Counters { public class StripedLongAdderTests { [Fact] public void InitialValueIsZero() { - new LongAdder().Sum().Should().Be(0); + new Counter().Count().Should().Be(0); } [Fact] public void WhenIncrementedOneIsAdded() { - var adder = new LongAdder(); + var adder = new Counter(); adder.Increment(); - adder.Sum().Should().Be(1); + adder.Count().Should().Be(1); } [Fact] public async Task WhenAddingConcurrentlySumIsCorrect() { - var adder = new LongAdder(); + var adder = new Counter(); await Threaded.Run(4, () => { @@ -36,7 +36,7 @@ await Threaded.Run(4, () => } }); - adder.Sum().Should().Be(400000); + adder.Count().Should().Be(400000); } } } diff --git a/BitFaster.Caching/Concurrent/LongAdder.cs b/BitFaster.Caching/Counters/Counter.cs similarity index 81% rename from BitFaster.Caching/Concurrent/LongAdder.cs rename to BitFaster.Caching/Counters/Counter.cs index da45ef3e..bffe4814 100644 --- a/BitFaster.Caching/Concurrent/LongAdder.cs +++ b/BitFaster.Caching/Counters/Counter.cs @@ -2,28 +2,25 @@ * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/publicdomain/zero/1.0/ - * - * See - * http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/65464a307408/src/java.base/share/classes/java/util/concurrent/atomic/LongAdder.java */ -namespace BitFaster.Caching.Concurrent +namespace BitFaster.Caching.Counters { /// /// A thread-safe counter suitable for high throuhgput counting across many concurrent threads. /// - public sealed class LongAdder : Striped64 + public sealed class Counter : Striped64 { /// - /// Creates a new LongAdder with an intial sum of zero. + /// Creates a new Counter with an intial sum of zero. /// - public LongAdder() { } + public Counter() { } /// - /// Computes the current sum. + /// Computes the current count. /// /// The current sum. - public long Sum() + public long Count() { var @as = this.Cells; Cell a; var sum = @base.VolatileRead(); diff --git a/BitFaster.Caching/Concurrent/PaddedLong.cs b/BitFaster.Caching/Counters/PaddedLong.cs similarity index 97% rename from BitFaster.Caching/Concurrent/PaddedLong.cs rename to BitFaster.Caching/Counters/PaddedLong.cs index b32a5fdc..27115afa 100644 --- a/BitFaster.Caching/Concurrent/PaddedLong.cs +++ b/BitFaster.Caching/Counters/PaddedLong.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; using System.Threading; -namespace BitFaster.Caching.Concurrent +namespace BitFaster.Caching.Counters { /// /// A long value padded by the size of a CPU cache line to mitigate false sharing. diff --git a/BitFaster.Caching/Concurrent/Striped64.cs b/BitFaster.Caching/Counters/Striped64.cs similarity index 97% rename from BitFaster.Caching/Concurrent/Striped64.cs rename to BitFaster.Caching/Counters/Striped64.cs index f2e827fa..be129007 100644 --- a/BitFaster.Caching/Concurrent/Striped64.cs +++ b/BitFaster.Caching/Counters/Striped64.cs @@ -1,18 +1,14 @@ using System; using System.Diagnostics.CodeAnalysis; -using System.Runtime.ConstrainedExecution; using System.Threading; /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/publicdomain/zero/1.0/ - * - * See - * http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/65464a307408/src/java.base/share/classes/java/util/concurrent/atomic/Striped64.java */ -namespace BitFaster.Caching.Concurrent +namespace BitFaster.Caching.Counters { /* * This class maintains a lazily-initialized table of atomically diff --git a/BitFaster.Caching/Lfu/ConcurrentLfu.cs b/BitFaster.Caching/Lfu/ConcurrentLfu.cs index 624a8262..aa08d77a 100644 --- a/BitFaster.Caching/Lfu/ConcurrentLfu.cs +++ b/BitFaster.Caching/Lfu/ConcurrentLfu.cs @@ -8,7 +8,7 @@ using System.Threading; using System.Threading.Tasks; using BitFaster.Caching.Buffers; -using BitFaster.Caching.Concurrent; +using BitFaster.Caching.Counters; using BitFaster.Caching.Lru; using BitFaster.Caching.Scheduler; @@ -765,17 +765,17 @@ internal string Format() internal class CacheMetrics : ICacheMetrics { public long requestHitCount; - public LongAdder requestMissCount = new LongAdder(); + public Counter requestMissCount = new Counter(); public long updatedCount; public long evictedCount; public double HitRatio => (double)requestHitCount / (double)Total; - public long Total => requestHitCount + requestMissCount.Sum(); + public long Total => requestHitCount + requestMissCount.Count(); public long Hits => requestHitCount; - public long Misses => requestMissCount.Sum(); + public long Misses => requestMissCount.Count(); public long Updated => updatedCount; diff --git a/BitFaster.Caching/Lru/TelemetryPolicy.cs b/BitFaster.Caching/Lru/TelemetryPolicy.cs index 11290d48..b7201f6a 100644 --- a/BitFaster.Caching/Lru/TelemetryPolicy.cs +++ b/BitFaster.Caching/Lru/TelemetryPolicy.cs @@ -1,6 +1,6 @@ using System; using System.Diagnostics; -using BitFaster.Caching.Concurrent; +using BitFaster.Caching.Counters; namespace BitFaster.Caching.Lru { @@ -12,10 +12,10 @@ namespace BitFaster.Caching.Lru [DebuggerDisplay("Hit = {Hits}, Miss = {Misses}, Upd = {Updated}, Evict = {Evicted}")] public struct TelemetryPolicy : ITelemetryPolicy { - private LongAdder hitCount; - private LongAdder missCount; - private LongAdder evictedCount; - private LongAdder updatedCount; + private Counter hitCount; + private Counter missCount; + private Counter evictedCount; + private Counter updatedCount; private object eventSource; /// @@ -25,19 +25,19 @@ public struct TelemetryPolicy : ITelemetryPolicy public double HitRatio => Total == 0 ? 0 : (double)Hits / (double)Total; /// - public long Total => this.hitCount.Sum() + this.missCount.Sum(); + public long Total => this.hitCount.Count() + this.missCount.Count(); /// - public long Hits => this.hitCount.Sum(); + public long Hits => this.hitCount.Count(); /// - public long Misses => this.missCount.Sum(); + public long Misses => this.missCount.Count(); /// - public long Evicted => this.evictedCount.Sum(); + public long Evicted => this.evictedCount.Count(); /// - public long Updated => this.updatedCount.Sum(); + public long Updated => this.updatedCount.Count(); /// public void IncrementMiss() @@ -72,10 +72,10 @@ public void OnItemUpdated(K key, V value) /// public void SetEventSource(object source) { - this.hitCount = new LongAdder(); - this.missCount = new LongAdder(); - this.evictedCount = new LongAdder(); - this.updatedCount = new LongAdder(); + this.hitCount = new Counter(); + this.missCount = new Counter(); + this.evictedCount = new Counter(); + this.updatedCount = new Counter(); this.eventSource = source; } }