golang channel通讯

areece · · 1169 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

基于channel的通讯,对于无缓存的channel

  • 发送的成功之时,接收者已经收到了。
  • 接收,发生在发送者成功之前。
    为什么会这样呢,如果我们靠记忆,就会怎么样,终究没有忘记快。可是如果我们能够从原理上来理解,也许就不容易忘记了。Golang的协程是协作式的,所以呢,如果发送者发送,那接收者存在一个何时运行的问题,如果发送成功之后,接收者才运行,不是说不可以,总少了那么一点点的协同的味道了。所以,如果换你来实现,一定也是发送者发送,送到接收者,唤起接收者运行(这时,发送者挂起了),然后到发送者重新回来运行的时候,接收者已经接收到了。

再扩展一下,对于带缓存的怎么办呢?这时候,其实就要看是谁,在什么 情况下阻塞了。总之,不能够自己一直运行下去,得给对方(你亲爱的合作方)运行的机会。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:areece

查看原文:golang channel通讯

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1169 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传