-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sync: elaborate on unbounded send not being async #2600
Conversation
It seems like the macos CI fix didn't work? @taiki-e |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good to me!
What do you think about also adding a similar note in the top-level docs for mpsc
? We mention the existence of the unbounded channel here:
tokio/tokio/src/sync/mpsc/mod.rs
Lines 13 to 14 in 44f45bd
//! Unbounded channels are also available using the `unbounded_channel` | |
//! constructor. |
but never really explain what that means. It might be helpful for new users to highlight the key difference between the bounded and unbounded channel's APIs?
Oops, It seems I've only fixed the azure pipelines. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for adding to the module level docs! I had some minor suggestions, but they aren't blockers.
tokio/src/sync/mpsc/mod.rs
Outdated
//! **Bounded channel**: If you need a bounded channel, you should use a bounded | ||
//! Tokio mpsc channel for both directions of communication. To call the async | ||
//! [`send`][bounded-send] or [`recv`][bounded-recv] methods in sync code, you | ||
//! should use [`Handle::block_on`]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe something like:
//! should use [`Handle::block_on`]. | |
//! should use [`Handle::block_on`]. This is because the sender must be able to wait | |
//! for additional capacity when the channel is full. `Handle::block_on` allows a | |
//! synchronous caller to wait on an `async fn`. |
(in general, I want to make sure all docs that state "you should do X" also explain why you should do that)
I added a similar comment to the oneshot channel. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good to me! i had a few nits.
@@ -10,8 +10,13 @@ | |||
//! is rejected and the task will be notified when additional capacity is | |||
//! available. In other words, the channel provides backpressure. | |||
//! | |||
//! Unbounded channels are also available using the `unbounded_channel` | |||
//! constructor. | |||
//! This module provides two variants of the channel: A bounded and an unbounded |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit:
//! This module provides two variants of the channel: A bounded and an unbounded | |
//! This module provides two variants of the channel: a bounded and an unbounded |
//! This module provides two variants of the channel: A bounded and an unbounded | ||
//! variant. The bounded variant has a limit on the number of messages that the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also, how about just
//! This module provides two variants of the channel: A bounded and an unbounded | |
//! variant. The bounded variant has a limit on the number of messages that the | |
//! This module provides two variants of the channel: bounded and unbounded. | |
//! The bounded variant has a limit on the number of messages that the |
//! This module provides two variants of the channel: A bounded and an unbounded | ||
//! variant. The bounded variant has a limit on the number of messages that the | ||
//! channel can store, and if this limit is reached, trying to send another | ||
//! message will sleep until a message is received from the channel. An unbounded |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe
//! message will sleep until a message is received from the channel. An unbounded | |
//! message will wait until a message is received from the channel. An unbounded |
rather than "sleep", for consistency?
- docs: misc improvements (#2572, #2658, #2663, #2656, #2647, #2630, #2487, #2621, #2624, #2600, #2623, #2622, #2577, #2569, #2589, #2575, #2540, #2564, #2567, #2520, #2521, #2572, #2493) - rt: allow calls to `block_on` inside calls to `block_in_place` that are themselves inside `block_on` (#2645) - net: fix non-portable behavior when dropping `TcpStream` `OwnedWriteHalf` (#2597) - io: improve stack usage by allocating large buffers on directly on the heap (#2634) - io: fix unsound pin projection in `AsyncReadExt::read_buf` and `AsyncWriteExt::write_buf` (#2612) - io: fix unnecessary zeroing for `AsyncRead` implementors (#2525) - io: Fix `BufReader` not correctly forwarding `poll_write_buf` (#2654) - coop: returning `Poll::Pending` no longer decrements the task budget (#2549) - io: little-endian variants of `AsyncReadExt` and `AsyncWriteExt` methods (#1915) - io: fix panic in `AsyncReadExt::read_line` (#2541) - task: add [`tracing`] instrumentation to spawned tasks (#2655) - sync: allow unsized types in `Mutex` and `RwLock` (via `default` constructors) (#2615) - net: add `ToSocketAddrs` implementation for `&[SocketAddr]` (#2604) - fs: add `OpenOptionsExt` for `OpenOptions` (#2515) - fs: add `DirBuilder` (#2524) [`tracing`]: https://crates.io/crates/tracing Signed-off-by: Eliza Weisman <eliza@buoyant.io>
# 0.2.22 (July 2!, 2020) ### Fixes - docs: misc improvements (#2572, #2658, #2663, #2656, #2647, #2630, #2487, #2621, #2624, #2600, #2623, #2622, #2577, #2569, #2589, #2575, #2540, #2564, #2567, #2520, #2521, #2493) - rt: allow calls to `block_on` inside calls to `block_in_place` that are themselves inside `block_on` (#2645) - net: fix non-portable behavior when dropping `TcpStream` `OwnedWriteHalf` (#2597) - io: improve stack usage by allocating large buffers on directly on the heap (#2634) - io: fix unsound pin projection in `AsyncReadExt::read_buf` and `AsyncWriteExt::write_buf` (#2612) - io: fix unnecessary zeroing for `AsyncRead` implementors (#2525) - io: Fix `BufReader` not correctly forwarding `poll_write_buf` (#2654) - io: fix panic in `AsyncReadExt::read_line` (#2541) ### Changes - coop: returning `Poll::Pending` no longer decrements the task budget (#2549) ### Added - io: little-endian variants of `AsyncReadExt` and `AsyncWriteExt` methods (#1915) - task: add [`tracing`] instrumentation to spawned tasks (#2655) - sync: allow unsized types in `Mutex` and `RwLock` (via `default` constructors) (#2615) - net: add `ToSocketAddrs` implementation for `&[SocketAddr]` (#2604) - fs: add `OpenOptionsExt` for `OpenOptions` (#2515) - fs: add `DirBuilder` (#2524) [`tracing`]: https://crates.io/crates/tracing Signed-off-by: Eliza Weisman <eliza@buoyant.io>
I keep seeing people being confused about the unbounded
send
method not being async, and thinking that our channels are actually blocking. I hope that this snippet improves on this.