Async provides a comprehensive set of synchronization primitives and asynchronous computation utilities for Go, complementing the standard library with additional concurrency patterns and data structures.
- ConcurrentMap - Implements the generic
async.Mapinterface in a thread-safe manner by delegating load/store operations to the underlyingsync.Map. - ShardedMap - Implements the generic
async.Mapinterface in a thread-safe manner, delegating load/store operations to one of the underlyingasync.SynchronizedMaps (shards), using a key hash to calculate the shard number. - Future - A placeholder object for a value that may not yet exist.
- Promise - While futures are defined as a type of read-only placeholder object created for a result which doesn’t yet exist, a promise can be thought of as a writable, single-assignment container, which completes a future.
- Executor - A worker pool for executing asynchronous tasks, where each submission returns a Future instance representing the result of the task.
- Task - A data type for controlling possibly lazy and asynchronous computations.
- Once - An object similar to sync.Once having the Do method taking
f func() (T, error)and returning(T, error). - Value - An object similar to atomic.Value, but without the consistent type constraint.
- CyclicBarrier - A reusable synchronization primitive that allows a group of goroutines to wait for each other to reach a common barrier point.
- WaitGroupContext - A WaitGroup with the
context.Contextsupport for graceful unblocking. - ReentrantLock - A mutex that allows goroutines to enter into the lock on a resource more than once.
- PriorityLock - A non-reentrant mutex that allows for the specification of lock acquisition priority.
Runnable examples are available in the examples directory. See the test files for additional usage examples.
Licensed under the MIT License.