Documentation ¶
Overview ¶
Package mpsc provides an efficient implementation of a multi-producer, single-consumer lock-free queue.
The Push function is safe to call from multiple goroutines. The Pop and Empty APIs must only be called from a single, consumer goroutine.
Index ¶
- Constants
- type Clock
- type CountMinSketch
- type Entry
- type Hasher
- type List
- func (l *List[K, V]) Back() *Entry[K, V]
- func (l *List[K, V]) Contains(entry *Entry[K, V]) bool
- func (l *List[K, V]) Front() *Entry[K, V]
- func (l *List[K, V]) Len() int
- func (l *List[K, V]) MoveAfter(e, mark *Entry[K, V])
- func (l *List[K, V]) MoveBefore(e, mark *Entry[K, V])
- func (l *List[K, V]) MoveToBack(e *Entry[K, V])
- func (l *List[K, V]) MoveToFront(e *Entry[K, V])
- func (l *List[K, V]) PopTail() *Entry[K, V]
- func (l *List[K, V]) PushFront(e *Entry[K, V]) *Entry[K, V]
- func (l *List[K, V]) Remove(e *Entry[K, V])
- func (l *List[K, V]) Reset()
- type MetaData
- type Metrics
- type Queue
- type ReadBufItem
- type RemoveReason
- type Shard
- type Slru
- type Store
- func (s *Store[K, V]) Close()
- func (s *Store[K, V]) Cost(cost func(v V) int64)
- func (s *Store[K, V]) Delete(key K)
- func (s *Store[K, V]) Doorkeeper(enabled bool)
- func (s *Store[K, V]) Get(key K) (V, bool)
- func (s *Store[K, V]) Len() int
- func (s *Store[K, V]) RemovalListener(listener func(key K, value V, reason RemoveReason))
- func (s *Store[K, V]) Set(key K, value V, cost int64, ttl time.Duration) bool
- type TimerWheel
- type TinyLfu
- func (t *TinyLfu[K, V]) Access(item ReadBufItem[K, V])
- func (t *TinyLfu[K, V]) EvictEntries() []*Entry[K, V]
- func (t *TinyLfu[K, V]) Remove(entry *Entry[K, V])
- func (t *TinyLfu[K, V]) Set(entry *Entry[K, V]) *Entry[K, V]
- func (t *TinyLfu[K, V]) UpdateCost(entry *Entry[K, V], delta int64)
- func (t *TinyLfu[K, V]) UpdateThreshold()
- type WriteBufItem
Constants ¶
const ( NEW int8 = iota REMOVE UPDATE )
const ( LIST_PROBATION uint8 = 1 LIST_PROTECTED uint8 = 2 WHEEL_LIST uint8 = 3 )
const ( MAX_READ_BUFF_SIZE = 64 MIN_WRITE_BUFF_SIZE = 4 MAX_WRITE_BUFF_SIZE = 1024 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CountMinSketch ¶
type CountMinSketch struct {
// contains filtered or unexported fields
}
func NewCountMinSketch ¶
func NewCountMinSketch(size uint) *CountMinSketch
func (*CountMinSketch) Add ¶
func (s *CountMinSketch) Add(h uint64) bool
func (*CountMinSketch) Estimate ¶
func (s *CountMinSketch) Estimate(h uint64) uint
type Entry ¶
type Entry[K comparable, V any] struct { // contains filtered or unexported fields }
type Hasher ¶
type Hasher[K comparable] struct { // contains filtered or unexported fields }
func NewHasher ¶
func NewHasher[K comparable]() *Hasher[K]
type List ¶
type List[K comparable, V any] struct { // contains filtered or unexported fields }
List represents a doubly linked list. The zero value for List is an empty list ready to use.
func NewList ¶
func NewList[K comparable, V any](size uint, listType uint8) *List[K, V]
New returns an initialized list.
func (*List[K, V]) MoveAfter ¶
MoveAfter moves element e to its new position after mark. If e or mark is not an element of l, or e == mark, the list is not modified. The element and mark must not be nil.
func (*List[K, V]) MoveBefore ¶
MoveBefore moves element e to its new position before mark. If e or mark is not an element of l, or e == mark, the list is not modified. The element and mark must not be nil.
func (*List[K, V]) MoveToBack ¶
MoveToBack moves element e to the back of list l. If e is not an element of l, the list is not modified. The element must not be nil.
func (*List[K, V]) MoveToFront ¶
MoveToFront moves element e to the front of list l. If e is not an element of l, the list is not modified. The element must not be nil.
type MetaData ¶
type MetaData[K comparable, V any] struct { // contains filtered or unexported fields }
type Queue ¶
type Queue[V any] struct { // contains filtered or unexported fields }
func (*Queue[V]) Empty ¶
Empty returns true if the queue is empty
Empty must be called from a single, consumer goroutine
type ReadBufItem ¶
type ReadBufItem[K comparable, V any] struct { // contains filtered or unexported fields }
type RemoveReason ¶ added in v0.1.2
type RemoveReason uint8
const ( REMOVED RemoveReason = iota EVICTED EXPIRED )
type Shard ¶
type Shard[K comparable, V any] struct { // contains filtered or unexported fields }
type Slru ¶
type Slru[K comparable, V any] struct { // contains filtered or unexported fields }
type Store ¶
type Store[K comparable, V any] struct { // contains filtered or unexported fields }
func NewStore ¶
func NewStore[K comparable, V any](maxsize int64) *Store[K, V]
New returns a new data struct with the specified capacity
func (*Store[K, V]) Doorkeeper ¶ added in v0.1.2
func (*Store[K, V]) RemovalListener ¶ added in v0.1.2
func (s *Store[K, V]) RemovalListener(listener func(key K, value V, reason RemoveReason))
type TimerWheel ¶
type TimerWheel[K comparable, V any] struct { // contains filtered or unexported fields }
func NewTimerWheel ¶
func NewTimerWheel[K comparable, V any](size uint) *TimerWheel[K, V]
type TinyLfu ¶
type TinyLfu[K comparable, V any] struct { // contains filtered or unexported fields }
func NewTinyLfu ¶
func NewTinyLfu[K comparable, V any](size uint, hasher *Hasher[K]) *TinyLfu[K, V]
func (*TinyLfu[K, V]) Access ¶
func (t *TinyLfu[K, V]) Access(item ReadBufItem[K, V])
func (*TinyLfu[K, V]) EvictEntries ¶
func (*TinyLfu[K, V]) UpdateCost ¶
func (*TinyLfu[K, V]) UpdateThreshold ¶
func (t *TinyLfu[K, V]) UpdateThreshold()
type WriteBufItem ¶
type WriteBufItem[K comparable, V any] struct { // contains filtered or unexported fields }