Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
badf606
feat(mpsc): add bounded permits with sequenced publication
tisonkun Sep 8, 2026
22f6c6e
test(mpsc): benchmark reservations and inline bounded messages
tisonkun Sep 8, 2026
82d6992
chore: remove the unused internal atomic waker
tisonkun Sep 8, 2026
151e8a8
refactor(mpsc): simplify bounded state under one mutex
tisonkun Sep 8, 2026
d085334
refactor(mpsc): separate bounded capacity and ring publication
tisonkun Sep 9, 2026
7ad35ad
test(mpsc): distinguish task and external receiver benchmarks
tisonkun Sep 9, 2026
31c64cc
fixup
tisonkun Sep 9, 2026
df2b96a
test(mpsc): remove Kanal from ecosystem benchmarks
tisonkun Sep 9, 2026
04d2f08
refactor(mpsc): back bounded storage with std sync_channel
tisonkun Sep 9, 2026
9cb5d1e
Revert "refactor(mpsc): back bounded storage with std sync_channel"
tisonkun Sep 9, 2026
7282b14
fix(mpsc): reject oversized bounded capacity up front
tisonkun Sep 9, 2026
a8cf749
perf(mpsc): pack bounded semaphore state into one atomic
tisonkun Sep 9, 2026
b2c4ff6
perf(mpsc): skip the receiver wake when it is not parked
tisonkun Sep 9, 2026
24ae4c8
perf(mpsc): count zero-sized bounded messages atomically
tisonkun Sep 9, 2026
03c2336
Revert "perf(mpsc): skip the receiver wake when it is not parked"
tisonkun Sep 9, 2026
bcd7129
test(mpsc): pin sample sizes for nanosecond-scale benches
tisonkun Sep 9, 2026
385876b
docs: note bounded MPSC throughput improvements in the changelog
tisonkun Sep 9, 2026
9febe2a
refactor(mpsc): drop the bounded allocation pre-check
tisonkun Sep 9, 2026
ee540c8
perf(mpsc): restore the receiver waker state with a plain store
tisonkun Sep 9, 2026
afb7c7f
refactor(mpsc): give zero-sized bounded storage its own type
tisonkun Sep 9, 2026
99373fe
refactor(mpsc): encode bounded semaphore sentinels as values, not bits
tisonkun Sep 9, 2026
682bfab
perf(mpsc): drop cache padding from the receiver waker
tisonkun Sep 9, 2026
aec619f
refactor(mpsc): organize the bounded channel by endpoint
tisonkun Sep 9, 2026
8070c87
refactor(mpsc): split bounded buffer storage by message size
tisonkun Sep 9, 2026
4c922a9
test(mpsc): inline the bounded buffer tests
tisonkun Sep 9, 2026
7093466
fixup
tisonkun Sep 9, 2026
7707e02
fixup
tisonkun Sep 9, 2026
25775fb
fix(mpsc): preserve wakeups and capacity ownership
tisonkun Sep 9, 2026
c5b75ee
refactor(mpsc): unify bounded message storage
tisonkun Sep 9, 2026
22c85e4
refactor(mpsc): simplify publication and receiver wakeups
tisonkun Sep 9, 2026
898a3c4
refactor(mpsc): use one mutex for bounded channels
tisonkun Sep 9, 2026
010a334
refactor(mpsc): clarify bounded state and capacity limits
tisonkun Sep 9, 2026
824bac1
docs(mpsc): clarify reservation errors and method links
tisonkun Sep 9, 2026
6cb4d6b
refactor(mpsc): simplify bounded send and wake paths
tisonkun Sep 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.

## Unreleased

### New features

* Add bounded MPSC `reserve` and `try_reserve` methods returning a `Permit`, allowing callers to wait for capacity before constructing a message; pending sends and reservations receive capacity in wait-queue order, and unused permits release capacity without claiming message order.

### Bug fixes

* Release MPSC receiver wakers when the receiver is dropped, avoiding retained tasks and ownership cycles when a waker holds a sender.
Expand All @@ -13,7 +17,6 @@ All notable changes to this project will be documented in this file.
### Improvements

* Finish releasing buffered bounded MPSC messages even if one message destructor panics.
* Reduce bounded MPSC contention when senders or the receiver are not waiting, improving throughput without changing capacity or cancellation semantics.
* Improve unbounded MPSC throughput with batched receiving and incremental storage reclamation; empty-buffer retention is bounded independently of previous peak occupancy.

## v0.7.2
Expand Down
12 changes: 0 additions & 12 deletions LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -377,18 +377,6 @@ the Apache-2.0 option for the incorporated portions.
Asyncband does not provide the upstream crate's synchronized receive
operations and simplifies the incorporated implementation accordingly.

Portions of asyncband/src/internal/atomic_waker.rs are derived from futures-rs
0.3.34 at the following exact revision and source path:

https://github.com/rust-lang/futures-rs/blob/705e6b5c0f06535b1aac1cb1989a172b3d45be8c/futures-core/src/task/__internal/atomic_waker.rs

futures-rs is licensed under Apache-2.0 or MIT. Apache Asyncband uses the
Apache-2.0 option for the incorporated portions. The upstream source carries
the following copyright notices:

Copyright (c) 2016 Alex Crichton
Copyright (c) 2017 The Tokio Authors

The polling loop in asyncband/src/blocking/executor.rs is adapted from Pollster
1.0.1 at the following exact revision and source path:

Expand Down
Loading