Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/reugn/async
Synchronization and asynchronous computation package for Go
https://github.com/reugn/async
async asynchronous asynchronous-api barrier concurrency concurrent-map future generics go lock mutex promise synchronization zero-dependency
Last synced: 7 days ago
JSON representation
Synchronization and asynchronous computation package for Go
- Host: GitHub
- URL: https://github.com/reugn/async
- Owner: reugn
- License: mit
- Created: 2019-12-28T09:48:40.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-09-07T15:16:55.000Z (4 months ago)
- Last Synced: 2024-09-08T16:47:47.741Z (3 months ago)
- Topics: async, asynchronous, asynchronous-api, barrier, concurrency, concurrent-map, future, generics, go, lock, mutex, promise, synchronization, zero-dependency
- Language: Go
- Homepage: https://pkg.go.dev/github.com/reugn/async
- Size: 115 KB
- Stars: 215
- Watchers: 5
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - async - An alternative sync library for Go (Future, Promise, Locks). (Goroutines / Search and Analytic Databases)
- awesome-go-extra - async - 12-28T09:48:40Z|2022-06-12T08:23:10Z| (Goroutines / Advanced Console UIs)
README
Async is a synchronization and asynchronous computation package for Go.## Overview
* **ConcurrentMap** - Implements the generic `async.Map` interface in a thread-safe manner by delegating load/store operations to the underlying `sync.Map`.
* **ShardedMap** - Implements the generic `async.Map` interface in a thread-safe manner, delegating load/store operations to one of the underlying `async.SynchronizedMap`s (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.
* **WaitGroupContext** - A WaitGroup with the `context.Context` support 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.## Examples
Can be found in the examples directory/tests.## License
Licensed under the MIT License.