前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Go程序员面试笔试宝典》第四章 · 通道书评

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

作者头像
Regan Yue
发布2022-09-23 10:09:13
3840
发布2022-09-23 10:09:13
举报
文章被收录于专栏:ReganYue's Blog

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的几种情况。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/08/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档