当我以前看到多线程通信时,我看到了Go的管道。那时,我觉得这东西很棒,因为无论我以前一直在接触过什么,没有这样的事情。这是第一次是不可避免的好奇心。因此,我想看看它是什么。显然,管道是语言级别的功能,因此我认为我需要移交他的来源。它仍然很受益。
如果您想知道他是什么,没有什么比直接看他的定义更直接的了。但是定义在哪里?在哪里找到?还记得我们是如何创建的吗?但是,当我寻找过去的发现方法只是函数的函数。
这仍然没有特定的功能实现。让我们编译。编写以下内容:
裁定订单:
尽管我们无法理解汇编,但其中一个吸引了我的注意。
称呼。美丽,只是找到他。
我找到了他,这是指针对象。我整理了对象的字段(但它们本身也有笔记):
可以看出,管道只是队列加上锁。
仍在分析该方法,在发送数据时调用该函数。它的实施简单易懂:
然后检查实际实现,功能步骤如下(个人理解,测试使用的某些代码已被我删除。):::::
尽管最终块不了解太多,但发送数据的一般过程很明确:
当您看到该功能的注释时,未锁定的操作如下:
从这个含义看,关键字与语法糖有点相似,其内部转换为对呼叫功能的简单判断。
至于接收数据的方法,其内部实现类似于发送数据。方法。
源代码简要介绍了。尽管我对此不了解,但我也有一般的理解。
只需使用它。概括。
最后,看完圆圈后,我觉得这不是很复杂。这是一个队列,接受了一端,并发送了一端。但是,它对多种关联处理进行了很多优化。如果它与Coroutine合作,如果它灵活地使用了,它应该具有良好的效果。然后,然后
原始:https://juejin.cn/post/71036985871084581