发送时不阻塞的 Crossbeam 零容量通道
Crossbeam zero-capacity channel which does not block on send
我需要 Crossbeam 的零容量通道的变体,crossbeam_channel::bounded(0)
,如果没有接收操作,它不会在 send()
上阻塞。在我的例子中,可以丢弃在没有正在进行的接收操作时发送的消息。接收者将收到它开始监听后发送的所有消息。这类似于 Redis 通道发生的情况,但在线程之间。
是否已经存在这样的东西,或者我需要自己实现吗?目前我还不清楚如何实现这样的功能,但我可能可以从查看有界零容量通道的实现开始,并可能用非阻塞版本替换阻塞发送操作。
所有交叉光束频道也提供 non-blocking 版本的 send()
方法。它被称为 try_send()
,它 returns 是一个错误,以防无法发送消息。对于 zero-capacity 通道,这会导致您要求的行为——消息只会被发送“如果恰好同时在通道的另一端有接收操作”(引自文档)。
我需要 Crossbeam 的零容量通道的变体,crossbeam_channel::bounded(0)
,如果没有接收操作,它不会在 send()
上阻塞。在我的例子中,可以丢弃在没有正在进行的接收操作时发送的消息。接收者将收到它开始监听后发送的所有消息。这类似于 Redis 通道发生的情况,但在线程之间。
是否已经存在这样的东西,或者我需要自己实现吗?目前我还不清楚如何实现这样的功能,但我可能可以从查看有界零容量通道的实现开始,并可能用非阻塞版本替换阻塞发送操作。
所有交叉光束频道也提供 non-blocking 版本的 send()
方法。它被称为 try_send()
,它 returns 是一个错误,以防无法发送消息。对于 zero-capacity 通道,这会导致您要求的行为——消息只会被发送“如果恰好同时在通道的另一端有接收操作”(引自文档)。