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


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

  • 相关阅读:
    网络编程 day1
    vtk对二维图像构造三维
    浅拷贝与深拷贝
    Java(十)(网络编程,UDP,TCP)
    探店通系统源码,短视频矩阵源码独立部署,look here
    huggingface 模型推理几个重要到类
    iOS使用Unity容器动态加载3D模型
    【算法】LeetCode:栈与队列篇
    [ai笔记12] chatGPT技术体系梳理+本质探寻
    Mock笔记
  • 原文地址:https://blog.csdn.net/qq_36045898/article/details/126450865