当前位置:   article > 正文

《Go程序员面试笔试宝典》第四章 · 通道书评_go程序员面试笔试宝典pdf

go程序员面试笔试宝典pdf

8月20日下午,我收到了《Go程序员面试笔试宝典》,看封面的第一感觉是和奇安信联系起来了。特别纸张质量感觉十分不错,排版也比较合理,看起来很舒服,特别是干货特别多,全是干货!

在这里插入图片描述

书里全是满满的干货,一读起来便停不下来了。

第一部分名字是语言基础,该部分主要介绍了逃逸分析、延迟语句、数据容器、通道和接口。我着重阅读了第4章——通道。

Go有一句经典名言:“不要通过共享内存来通信,而要通过通信来实现内存共享”。这时候通道channel的重要性就体现出来了。

该章第一节讲述了CSP与Go语言的关系。Go语言进一步将CSP发扬光大,一开始就把CSP的思想融入语言的核心,所以并发编程成为Go的一个优势。

该章第二节讲述了channel有哪些应用:

1.我们可以通过关闭channel或发送约定的标志来发送停止信号。

2.通过与timer、select、ticker等实现超时控制以及执行定时任务。

3.实现生产者消费者模型。

4.控制并发数,因为channel可以自定义容量,通过channel内的“东西”数量来控制并发数。

该章第三节介绍了通道的底结构:

先是介绍了通道的底层数据结构,重点讲了几个字段的含义。

然后通过源码解读了通道的创建过程、接收过程、发送过程。这部分详细的解读了源码,可以说是手把手,可是我感觉我有些地方还是没完全懂。

该章第四节讲述了通道的关闭过程发生了什么。关闭channel的逻辑比较简单,对于等待接收者,会收到应该相应类型的零值,而对于等待发送者,会直接panic。

该章第五节是介绍从一个关闭的通道里面能不能够读出数据。答案是不能。

该章第六节是教会我们如何优雅的关闭通道。当N个sender和1个receiver时,我们可以利用一个信号channel来关闭sender,然后GC会清理没有被协程调用的channel。当N个sender和M个receiver时,启用一个“中间人”将receive的所有关闭信号都给这个中间人,这个中间人只要收到第一个关闭信号,就像所有sender发送关闭信号,这样就不会导致sender被多个receive重复关闭。

该章第七节介绍了一个我之前没有听说过的概念——“happens-before”,channel的设计就遵守这个概念。

该章第八节讲述了通道在什么情况下会引起资源泄漏——就是携程在管道被阻塞了,然后管道一直是空的或满的,GC不会回收这个channel,这个协程就一直阻塞在这了。

该章第九节介绍了通道的几种操作和panic的几种情况。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/383973
推荐阅读
相关标签
  

闽ICP备14008679号