《Go 同步和并发设计模式》培训结束,get满满干货!-程序员宅基地

5月26日,在北京举办了GoCN和滴滴再次携手邀请了来自微博研发平台架构中心资深架构师-晁岳攀老师在北京举办的《深入Go 并发编程》培训专场,本次参加培训报名人数达到170余人,远超我们一开始限定的数量150人,更是有同学在培训当天联系到我们开启了报名通道。


640?wx_fmt=jpeg       

据现场反馈,各位gopher们激情高涨,有些同学一开始是奔着晁老师超过120页的PPT去的,但一整天完整听下来,受益匪浅。此次授课的晁岳攀老师在课堂上手把手的教大家Go 同步和并发设计模式,也取得了良好的成效,受到学员们的一致好评。


640?wx_fmt=jpeg      

本次培训课程回顾


640?wx_fmt=jpeg      

并发原语综述 


基本并发原语 


  • Mutex的实现、扩展功能和坑。

  • RWMutex的实现、扩展功能和坑。

  • Waitgroup的实现、坑

  • Cond的使用和坑

  • Once的实现和坑,单例的Eager/Lazy实现

  • Pool的坑, net.Conn的池

  • Map的实现、应用场景

  • Context的一些问题

扩展并发原语 


  • 可重入锁

  • 信号量

  • SingleFlight及应用

  • ErrGroup

  • 自旋锁

  • 文件锁

  • 并发Map的多种实现

原子操作 


  • 原子操作的实现

  • 操作的数据类型

  • 提供的函数

  • 通用Value类型

  • 扩展的原子操作库

分布式并发原语


  • 锁,Mutex, RWmutex实战

  • 栅栏

  • leader选举

  • 队列

  • STM

  • 其它分布式并发库

channel


  • 常见易犯错的channel使用场景

  • 三大使用场景

  • Or-done模式的三种实现

  • 扇入

  • 扇出

  • Tee

  • Pipeline

  • 流式处理

happenbefore


  • init函数

  • goroutine

  • channel

  • Mutex/RWMutex

  • Waitgroup

  • Once

  • atomic


习题研讨


Go提供了我们便利的进行并发编程的工具、方法和同步原语,同时也提供给我们诸多的犯错的机会,也就是俗称的“坑”。即使是顶级Go开发的项目,比如Docker、Kubernetes、gRPC、etcd, 都是有经验丰富的Go开发专家锁开发,也踩过不少的并发的坑,而且依然源源不断的继续踩着,即便是标准库也是这样。


分析和总结并发编程中的陷阱,避免重复踩在别人的坑中,正是本次培训课的重要内容。只有深入了解并发原语的实现,全面了解它们的特性和限制场景,注意它们的局限和容易踩的坑,才能提高我们的并发编程的能力。通过了解和学习其他人的经验和贡献的项目和库,我们可以更好的扩展我们的视野,避免重复的造轮子,或者说我们可以制作更好的轮子。


语言的内存模型定义了对变量的读写的可见性,可以清晰而准确读写事件的happen before关系。对于我们,可以很好地分析和编排goroutine的运行,避免数据的竞争和不一致的问题。


参家培训的伙伴都获得了哪些收获呢?


  • 基本同步原语的具体实现、hack同步原语进行扩展,它们的使用场景和坑,以及别人是怎么踩的等的了解

  • 一些扩展的同步源于,对于标准库sync包的补充的了解

  • 对于规模很大的项目,分布式同步原语是必不可少的,便利的分布式同步原语的了解

  • atomic可以保证对数据操作的一致性,利用CAS可以设计lock-free的数据结构

  • channel是Go语言进行并发编程的很好的工具,它的使用姿势了解

  • Go语言的内存模型的学习

本次培训PPT获取方式:关注“Go中国”公众号,在公众号对话栏回复Go培训即可获取!


640?wx_fmt=png


GO 中国征稿啦!


自“Go中国  ” 公众号上线以来,因为扎实的干货(害羞)、前沿的解读(娇羞)、满满的福利一直深受 Gopher 们的喜爱,为了给大家带来更具实力的干货以及 Go 语项目开发经验,我们将开始对外征稿!


现在我们开始对外征稿啦!如果你有优秀的 Go 语言技术文章想要分享,热点的行业资讯需要报道等,欢迎联系在菜单栏回复“投稿”“合作”联系我们的小编进行投稿。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/90652783

智能推荐

net包之Lookup-程序员宅基地

文章浏览阅读424次。Lookup所有相关的函数全在net包下的doc.go中LookupHost(host string) (addrs []string, err error)对某个主机名执行DNS查询,返回主机名,注意返回的是字符窜slice.可能有多个IP地址 addr, _ := net.LookupHost("www.baidu.com") fmt.Println(addr) // ..._net.lookhost

有这5款开源软件,语音转文字很简单!-程序员宅基地

文章浏览阅读2.2w次,点赞13次,收藏136次。来自:开源最前线(ID:OpenSourceTop)链接:https://fosspost.org/lists/open-source-speech-recognition-speec..._c语言 开源 图片转文字

使用Docker创建 php 运行环境,以php5为例_dockerfile from php5-程序员宅基地

文章浏览阅读2.7k次。原文第一版发表于我的个人空间:https://www.imhou.com写在前面:项目过程中,有些需要维护的项目是用的php5版本,但是新项目却是用的php7版本,难免在代码和服务器上有些许不兼容,导致在一台服务器上搭建环境也不太好配置,要考虑软件的兼容问题,实在麻烦。所以就想到用Docker来创建镜像,各自运行在对应的容器中,互不干扰,很好地利用来服务器资源。准备:阿里云账户..._dockerfile from php5

Maven 修改tomcat运行版本和端口,使用Maven发布项目_tomcat8-maven-plugin 修改t端口-程序员宅基地

文章浏览阅读5.6k次。maven默认是使用tomcat6跑项目的,这段是让maven用tomcat7去跑在pom.xml中添加<build> <!-- we dont want the version to be part of the generated war file name --> <finalName>${project.artifactId}&lt..._tomcat8-maven-plugin 修改t端口

vdbench数据校验翻译_vdbench 'data_errors=50' requested-程序员宅基地

文章浏览阅读1.2k次。本文翻译自vdbench的使用手册中的数据校验章节,如有纰漏,还请不吝赐教。vdbench源码下载地址:https://www.oracle.com/downloads/server-storage/vdbench-source-downloads.html数据校验在性能测试的时候不应该被使用,处理器开销可能影响性能测试的结果。在我开始之前,我想问一个想了很多次的问题:“为什么我使用vdbench去检查数据冲突?我也可以写一个大文件,计算校验和,然后重新读这个文件并比较校验和。”当然,你可._vdbench 'data_errors=50' requested

asp.net core 配置https证书_asp.net core3.1配置ssl证书-程序员宅基地

文章浏览阅读8.8k次。目的:使用.netcore自带的kestrel加载自己指定的ssl首先准备ssl文件:(密码为:123456)代码如下:using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNe..._asp.net core3.1配置ssl证书

随便推点

matlab polyfit 拟合度,Matlab中polyfit和regress-程序员宅基地

文章浏览阅读1.2k次。1.表中是道琼斯工业指数(DJIA)和标准普尔500种股票指数(S&P500)1988年至1997年对应股票的收益率资料:年份DJIA收益率(%)S&P500收益率(%)年份DJIA收益率(%)S&P500收益率(%)198816.016.6199316.810.1198931.731.519944.91.31990-0.4-3.2199536.437.6199123.93..._matlab polyfit f检验显著性检验

单片机实现PWM LED灯亮度调节及Proteus仿真_单片机pwm控制led亮度程序-程序员宅基地

文章浏览阅读694次。通过调节PWM占空比,我们可以控制LED的亮度。为了实现这一功能,我们可以利用单片机的PWM(脉冲宽度调制)功能来调节LED的亮度。在仿真过程中,你将看到LED的亮度逐渐增加然后逐渐降低,这是由代码中的循环控制的。通过这种方式,我们可以验证代码的正确性,并确保LED的亮度可以按预期进行调节。首先,将单片机的一个PWM输出引脚连接到LED的正极,将LED的负极连接到单片机的地(GND)引脚。确保连接正确无误后,我们可以开始编写代码。下面是一个简单的示例代码,演示如何使用单片机的PWM功能来控制LED的亮度。_单片机pwm控制led亮度程序

ubuntu 下播放 yuv 格式的文件&预览Raw格式图片_安装ufraw-程序员宅基地

文章浏览阅读7k次,点赞6次,收藏20次。1、ubuntu 下播放 yuv 格式的文件1)使用ffplaysudo apt-get install ffmpeg查看图片ffplay -f rawvideo -video_size 640x360 test_input_640x360_bak.yuv另外,windows下面可以使用yuvplayer.exe,打开需要设置size,软件下载链接http://..._安装ufraw

Android 集成zxing二维码扫描、自定义_scanoptions scancontract zxing-程序员宅基地

文章浏览阅读7.4k次,点赞6次,收藏16次。项目主要有zxing的基本使用,包含扫描回调、连续扫描、自定义扫描框:一、依赖库implementation 'com.journeyapps:zxing-android-embedded:4.3.0'Github这个库是zxing Android端的,封装了一些基本的使用方法二、基本使用这里使用的是startActivityForResult的替代方法,registerForActivityResult..._scanoptions scancontract zxing

连以太网接口和串口傻傻分不清?看完本文就懂了_网口和串口的区别-程序员宅基地

文章浏览阅读6.1k次,点赞6次,收藏33次。路由器是一种网络设备,它的主要功能是在不同的网络之间转发数据包,实现网络互联。路由器根据数据包的目的地址,选择最佳的路径,将数据包发送到下一跳。路由器可以连接不同的网络类型,如以太网、帧中继、PPP等。路由器上有多种不同的接口,用于连接不同的网络或设备。其中最常见的两种接口是以太网接口和串口。本文就给大家介绍一下以太网接口和串口,让我们直接开始!_网口和串口的区别

Unity打开出现两个空白错误的解决方法_unity 两个空白报错-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏2次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar_unity 两个空白报错

推荐文章

热门文章

相关标签