-
-
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
Add back mpsc try_recv #3350
Comments
In trying to upgrade Goose to Tokio 1.0+ I've run into a regression due to the removal of For example, I was using try_recv to synchronize metrics from user threads to the parent threads, but replacing this with Is there any reason why upgrading to Tokio 1.0+ and switching to |
@jeremyandrews In your case where you really need |
@Darksonn Thanks, will do. |
When writing @jeremyandrews I also wrote |
@bikeshedder Thanks for the feedback. I was able to get things working by switching to flume (my needs are relatively simple), but I'll take a look at deadqueue as an alternative option as well. |
## Issue Addressed resolves #2129 resolves #2099 addresses some of #1712 unblocks #2076 unblocks #2153 ## Proposed Changes - Updates all the dependencies mentioned in #2129, except for web3. They haven't merged their tokio 1.0 update because they are waiting on some dependencies of their own. Since we only use web3 in tests, I think updating it in a separate issue is fine. If they are able to merge soon though, I can update in this PR. - Updates `tokio_util` to 0.6.2 and `bytes` to 1.0.1. - We haven't made a discv5 release since merging tokio 1.0 updates so I'm using a commit rather than release atm. **Edit:** I think we should merge an update of `tokio_util` to 0.6.2 into discv5 before this release because it has panic fixes in `DelayQueue` --> PR in discv5: sigp/discv5#58 ## Additional Info tokio 1.0 changes that required some changes in lighthouse: - `interval.next().await.is_some()` -> `interval.tick().await` - `sleep` future is now `!Unpin` -> tokio-rs/tokio#3028 - `try_recv` has been temporarily removed from `mpsc` -> tokio-rs/tokio#3350 - stream features have moved to `tokio-stream` and `broadcast::Receiver::into_stream()` has been temporarily removed -> `tokio-rs/tokio#2870 - I've copied over the `BroadcastStream` wrapper from this PR, but can update to use `tokio-stream` once it's merged tokio-rs/tokio#3384 Co-authored-by: realbigsean <[email protected]>
When dealing with a one-shot channel that must be polled from time to time, what are the tradeoffs between the |
After asking in the
|
For anyone listening in here, the next Tokio release will happen next week and will include a |
hi - why does try_recv require mutable reference? |
Because the mpsc channel is a multi-producer single-consumer channel, and using an immutable reference would allow several receivers to receive in parallel. |
The mpsc
try_recv
method was removed in #3263 due to problems with the implementation. This issue tracks adding it back.Note that it is currently possible to do
unconstrained(rx.recv()).now_or_never()
usingtokio::task::unconstrained
andFutureExt::now_or_never
, but be aware that it has the same issue as the oldtry_recv
that previously sent messages may not be available immediately. To be clear, they are not lost, the messages are just not received until later.The text was updated successfully, but these errors were encountered: