par

package
v0.8.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2023 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package par implements parallel execution helpers.

Index

Constants

This section is empty.

Variables

View Source
var ErrCacheEntryNotFound = errors.New("cache entry not found")

Functions

This section is empty.

Types

type Cache

type Cache[K comparable, V any] struct {
	// contains filtered or unexported fields
}

Cache runs an action once per key and caches the result.

func (*Cache[K, V]) Clear

func (c *Cache[K, V]) Clear()

Clear removes all entries in the cache.

Concurrent calls to Get may return old values. Concurrent calls to Do may return old values or store results in entries that have been deleted.

TODO(jayconrod): Delete this after the package cache clearing functions in internal/load have been removed.

func (*Cache[K, V]) Delete

func (c *Cache[K, V]) Delete(key K)

Delete removes an entry from the map. It is safe to call Delete for an entry that does not exist. Delete will return quickly, even if the result for a key is still being computed; the computation will finish, but the result won't be accessible through the cache.

TODO(jayconrod): Delete this after the package cache clearing functions in internal/load have been removed.

func (*Cache[K, V]) DeleteIf

func (c *Cache[K, V]) DeleteIf(pred func(key K) bool)

DeleteIf calls pred for each key in the map. If pred returns true for a key, DeleteIf removes the corresponding entry. If the result for a key is still being computed, DeleteIf will remove the entry without waiting for the computation to finish. The result won't be accessible through the cache.

TODO(jayconrod): Delete this after the package cache clearing functions in internal/load have been removed.

func (*Cache[K, V]) Do

func (c *Cache[K, V]) Do(key K, f func() V) V

Do calls the function f if and only if Do is being called for the first time with this key. No call to Do with a given key returns until the one call to f returns. Do returns the value returned by the one call to f.

func (*Cache[K, V]) Get

func (c *Cache[K, V]) Get(key K) (V, bool)

Get returns the cached result associated with key and reports whether there is such a result.

If the result for key is being computed, Get does not wait for the computation to finish.

type ErrCache added in v0.8.0

type ErrCache[K comparable, V any] struct {
	Cache[K, errValue[V]]
}

ErrCache is like Cache except that it also stores an error value alongside the cached value V.

func (*ErrCache[K, V]) Do added in v0.8.0

func (c *ErrCache[K, V]) Do(key K, f func() (V, error)) (V, error)

func (*ErrCache[K, V]) Get added in v0.8.0

func (c *ErrCache[K, V]) Get(key K) (V, error)

Get returns the cached result associated with key. It returns ErrCacheEntryNotFound if there is no such result.

type Queue

type Queue struct {
	// contains filtered or unexported fields
}

Queue manages a set of work items to be executed in parallel. The number of active work items is limited, and excess items are queued sequentially.

func NewQueue

func NewQueue(maxActive int) *Queue

NewQueue returns a Queue that executes up to maxActive items in parallel.

maxActive must be positive.

func (*Queue) Add

func (q *Queue) Add(f func())

Add adds f as a work item in the queue.

Add returns immediately, but the queue will be marked as non-idle until after f (and any subsequently-added work) has completed.

func (*Queue) Idle

func (q *Queue) Idle() <-chan struct{}

Idle returns a channel that will be closed when q has no (active or enqueued) work outstanding.

type Work

type Work[T comparable] struct {
	// contains filtered or unexported fields
}

Work manages a set of work items to be executed in parallel, at most once each. The items in the set must all be valid map keys.

func (*Work[T]) Add

func (w *Work[T]) Add(item T)

Add adds item to the work set, if it hasn't already been added.

func (*Work[T]) Do

func (w *Work[T]) Do(n int, f func(item T))

Do runs f in parallel on items from the work set, with at most n invocations of f running at a time. It returns when everything added to the work set has been processed. At least one item should have been added to the work set before calling Do (or else Do returns immediately), but it is allowed for f(item) to add new items to the set. Do should only be used once on a given Work.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL