gpt4 book ai didi

asynchronous - 同步/异步互操作 channel

转载 作者:行者123 更新时间:2023-12-03 11:45:02 27 4
gpt4 key购买 nike

当您希望跨线程(以线程阻塞方式)发送一系列事物时,您有例如 crossbeam_channel .
当您希望跨 future 发送一系列事物时(以非线程阻塞, future 阻塞的方式),您有例如 tokio::sync::mpsc .
什么能让我从阻塞线程发送,并从异步上下文接收? (顺便说一句,我可以想象在某些时候需要相反的情况。)
我需要限制 channel ,发送时线程阻塞,接收时阻塞 future 。
我正在寻找一些性能更好的东西,就像 crossbeam_channel 中所做的一样。 ,但是唤醒 future 而不是线程,具有缓冲一些消息的能力,以尽可能避免阻塞。给出的答案here因为多消息场景看起来有点像这方面的修补程序。

最佳答案

自从提出此问题以来,Tokio 提供的 channel 已获得执行此操作的功能。您可以直接调用 blocking_send blocking_recv 使用非异步代码时 channel 上的方法:

let (mut tx, mut rx) = tokio::sync::mpsc::channel(10);

std::thread::spawn(move || {
// send a value, blocking synchronously
// this allows async channels to be used in non-async contexts
tx.blocking_send("testing").unwrap();
});

// receive a value, blocking asynchronously
assert_eq!(rx.recv().await.unwrap(), "testing");

关于asynchronous - 同步/异步互操作 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63363513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com