It is a lib which provide asynchronous locking mechanisms, which used spinlock algorithm. It's maybe very efficient because when mutex tries to acquire data unsuccessfully, these returning control to an async runtime back. This lib built only on atomics and don't use others std synchronous data structures, which make this lib so fast.
```rust use fastasyncmutex::mutex::Mutex;
async fn main() { let mutex = Mutex::new(10); let guard = mutex.lock().await; assert_eq!(*guard, 10); } ```
There is result of benchmarks which runs on MacBook Pro (16-inch, 2019) 2,3 GHz 8-Core Intel Core i9 16GB RAM
Tests you can find in the benchmarks dir.
```
running 35 tests
test mutex::fastasyncmutex::tests::concurrencywithoutwaiting ... bench: 48,472 ns/iter (+/- 1,635)
test mutex::fastasyncmutex::tests::create ... bench: 0 ns/iter (+/- 0)
test mutex::fastasyncmutex::tests::stepbystepwithoutwaiting ... bench: 22,710 ns/iter (+/- 2,502)
test mutex::fastasyncmutexordered::tests::concurrencywithoutwaiting ... bench: 62,054 ns/iter (+/- 2,821)
test mutex::fastasyncmutexordered::tests::create ... bench: 0 ns/iter (+/- 0)
test mutex::fastasyncmutexordered::tests::stepbystepwithoutwaiting ... bench: 22,404 ns/iter (+/- 1,980)
test mutex::futures::tests::concurrencywithoutwaiting ... bench: 71,269 ns/iter (+/- 2,695)
test mutex::futures::tests::create ... bench: 93 ns/iter (+/- 9)
test mutex::futures::tests::stepbystepwithoutwaiting ... bench: 22,268 ns/iter (+/- 3,061)
test mutex::smol::tests::concurrencywithoutwaiting ... bench: 65,587 ns/iter (+/- 2,411)
test mutex::smol::tests::create ... bench: 0 ns/iter (+/- 0)
test mutex::smol::tests::stepbystepwithoutwaiting ... bench: 23,112 ns/iter (+/- 2,687)
test mutex::tokio::tests::concurrencywithoutwaiting ... bench: 57,663 ns/iter (+/- 2,737)
test mutex::tokio::tests::create ... bench: 5 ns/iter (+/- 0)
test mutex::tokio::tests::stepbystepwithoutwaiting ... bench: 27,206 ns/iter (+/- 2,714)
test rwlock::fastasyncmutex::tests::concurrencyread ... bench: 48,845 ns/iter (+/- 3,166)
test rwlock::fastasyncmutex::tests::concurrencywrite ... bench: 53,226 ns/iter (+/- 2,136)
test rwlock::fastasyncmutex::tests::create ... bench: 0 ns/iter (+/- 0)
test rwlock::fastasyncmutex::tests::stepbystepread ... bench: 22,840 ns/iter (+/- 3,707)
test rwlock::fastasyncmutex::tests::stepbystepwriting ... bench: 22,274 ns/iter (+/- 2,105)
test rwlock::fastasyncmutexordered::tests::concurrencyread ... bench: 63,874 ns/iter (+/- 2,844)
test rwlock::fastasyncmutexordered::tests::concurrencywrite ... bench: 60,157 ns/iter (+/- 10,199)
test rwlock::fastasyncmutexordered::tests::create ... bench: 0 ns/iter (+/- 0)
test rwlock::fastasyncmutexordered::tests::stepbystepread ... bench: 23,459 ns/iter (+/- 5,786)
test rwlock::fastasyncmutexordered::tests::stepbystepwriting ... bench: 27,603 ns/iter (+/- 4,806)
test rwlock::smol::tests::concurrencyread ... bench: 50,487 ns/iter (+/- 6,896)
test rwlock::smol::tests::concurrencywrite ... bench: 82,739 ns/iter (+/- 4,317)
test rwlock::smol::tests::create ... bench: 1 ns/iter (+/- 0)
test rwlock::smol::tests::stepbystepread ... bench: 21,993 ns/iter (+/- 2,598)
test rwlock::smol::tests::stepbystepwriting ... bench: 25,255 ns/iter (+/- 2,989)
test rwlock::tokio::tests::concurrencyread ... bench: 56,158 ns/iter (+/- 1,458)
test rwlock::tokio::tests::concurrencywrite ... bench: 56,646 ns/iter (+/- 2,227)
test rwlock::tokio::tests::create ... bench: 5 ns/iter (+/- 1)
test rwlock::tokio::tests::stepbystepread ... bench: 26,073 ns/iter (+/- 3,883)
test rwlock::tokio::tests::stepbystepwriting ... bench: 26,231 ns/iter (+/- 2,877)
test result: ok. 0 passed; 0 failed; 0 ignored; 35 measured; 0 filtered out ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.