首页 菜鸟问答正文

调研Rust中等同于gochan的channel机制

piaodoo 菜鸟问答 2022-08-15 01:23:23 827 0

golang中的chan 通讯机制比较简单。是阻塞的。默认它的行为是,如果是有size的chan,比如make了4个size的chan,那它可以在被读取之前,写入4次,如果4次写完,你没有被取出塞进去的消息。那么就会阻塞。

我们看下rust中的实现。

在namespace std :: sync :: mpsc :: 下面,我们可以看到channel的两种实现,一种是完全阻塞的sync ,一种是全异步的。

sync channel会被阻塞。当你写了一个,但是没有消费。直到前面的被消费,后面的才会继续允许你写进去。

这个跟golang的就很像了

let (sender, receiver) = sync_channel(1);

语法很便捷,你可以在初始化的时候,指定size,这样你就跟golang一样,make 了n个size的位子,允许你最多写n个消息。

直到消息被消费。否则你是无法继续写的。

创建一个新的异步通道,返回发送方Sender, 接收方Receiver。在发送者上发送的所有数据在接收者这边看来将按照发送的顺序排列,并且不会阻塞发送端,你可以一直发消息(这个channel有一个无限缓冲区,不像 sync _ channel,它将在达到其缓冲区限制后阻塞,你就不能再发)。Recv 将一直阻塞,直到有至少一条消息可用,同时至少有一个发件人还活着(包括克隆)。国外直播

可以克隆发送方以多次发送到同一channel信道,但只支持一个接收方消费。

如果接收方在尝试与发送方一起发送时断开连接,则 send 方法将返回 SendError。类似地,如果在尝试 recv 时断开发件人的连接,recv 方法将返回 RecvError。

举报/反馈

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/119200.html

社交距离(socialdistance)

  • 表距离还在用distance吗?其实你还有其他选择

    表距离还在用distance吗?其实你还有其他选择

  • △5日,海南三亚,核酸检测有序开展。

  • 全国疫情今天(8月6日)最新消息通报:昨日本土新增310+275,其中海南262+46

  • 北京疫情地图分布图实时更新(查询入口)

    北京疫情地图分布图实时更新(查询入口)

  • 评论

    搜索

    文章专栏

    最近发表

    标签列表