首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Go语言并发编程
kevinyan
创建于2021-05-15
订阅专栏
本教程会现介绍Go语言常用的并发原语,然后从现实编程中可能会遇到的并发问题出发,使用Go提供的并发原语逐个解决它们。教程里用户解决并发问题的模式和示例代码甚至可以直接拿来应用到程序中去解决实际问题。
等 37 人订阅
共15篇文章
创建于2021-05-15
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Golang五种原子性操作的用法详解
本文我们详细聊一下Go语言的原子操作的用法,啥是原子操作呢?顾名思义,原子操作就是具备原子性的操作... 是不是感觉说了跟没说一样,原子性的解释如下: CPU执行一系列操作时不可能不发生中断,但如果我
几个预防并发搞垮下游服务的方法
上一篇文章 我用休眠做并发控制,搞垮了下游服务 发出去后得到不少网友的回应,有人问自己平时用的方案行不行,有人建议借鉴TCP的拥塞控制动态地调整发起的并发数,还有人问为啥我要管下游抗不抗得住。
我用休眠做并发控制搞垮了下游服务
Go语言原生支持并发,只要使用go关键字就能把函数交给goroutine来并发地执行一段程序,正是因为并发难度特别低,有不少人在掌握语法后就特别喜欢尝试进行并发编程,包括我也是,不过我向来保持着对编程
并发编程--用SingleFlight合并相同请求
具体到Go程序运行的层面来说,SingleFlight的作用是在处理多个goroutine同时调用同一个函数的时候,只让一个goroutine去实际调用这个函数,等到这个goroutine返回结果的时候,再把结果返回给其他几个同时调用了相同函数的goroutine,这样可以减少…
觉得WaitGroup不好用?试试ErrorGroup吧!
在并发编程里,sync.WaitGroup并发原语的使用频率非常高,经常用于协同等待场景:一个goroutine在检查点(Check Point)等待一组执行任务的 worker goroutine 全部完成,如果在执行任务的这些worker goroutine 还没全部完成,…
常用限流算法的应用场景和实现原理
在高并发业务场景下,保护系统时,常用的"三板斧"有:"熔断、降级和限流"。今天和大家谈谈常用的限流算法的几种实现方式,这里所说的限流并非是网关层面的限流,而是业务代码中的逻辑限流。 下面会展开说每种算法的实现原理和他们自身的缺陷,方便以后我们在实际应用中能够根据不同的情况选择正…
Go并发编程实战--信号量的使用方法和其实现原理
信号量是并发编程中常见的一种同步机制,在需要控制访问资源的线程数量时就会用到信号量,关于什么是信号量这个问题,我引用一下维基百科对信号量的解释,大家就明白了。 我们一般用信号量保护一组资源,比如数据库连接池、一组客户端的连接等等。**每次获取资源时都会将信号量中的计数器减去对应…
偷师Kubernetes源码,学会怎么用Go实现调度队列
在动手实现调度队列前,我们应该先来学习参考一下那些优秀的开源项目里是怎么实现调度队列的。Kubernetes的调度器的调度算法的设计里使用了调度队列,在调度队列的实现里,使用了两个不同的队列。 第一个队列,叫做activeQ。凡是在activeQ 里的Pod,都是下一个调度周期…
Go语言的原子操作和互斥锁的区别
这个系列的文章里介绍了很多并发编程里经常用到的技术,除了Context、计时器、互斥锁还有通道外还有一种技术--原子操作在一些同步算法中会被用到。今天的文章里我们会简单了解一下Go语言里对原子操作的支持,然后探讨一下原子操作和互斥锁的区别。 原子操作即是进行过程中不能被中断的操…
并发问题的解决思路以及Go语言调度器工作原理
上周的文章《Go并发编程里的数据竞争以及解决之道》最后留下了一个用并发解决的思考题,期间有几位同学留言说了自己的实现思路,也有两位直接私信发代码让我看的,非常感谢几位的积极参与。今天的文章我首先说一下上篇文章里的思考题的解决思路,我会给出完整可运行的代码。之后通过观察程序的运行…
并发编程的数据竞争问题以及解决之道
Go语言以容易进行并发编程而闻名,但是如果稍不注意,并发程序可能导致的数据竞争问题(data race)就会经常出现在你编写的并发程序的待解决Bug列表中-- 如果你不幸在代码中遇到这种错误,这将是最难调试的错误之一。 今天这篇文章里我们首先来看一个导致数据竞争的示例程序,使用…
面试官让我用channel实现sync包里的同步锁,是不是故意为难我?
今天,我将深入探讨Go语言channel和select语句的表达能力。为了演示只用这两个原语就可以实现多少功能,我将从头开始用它们重写sync包。 sync包提供的同步原语的有哪些以及如何使用我们已经在之前的文章里介绍过了,所以这里不会再去介绍用channel实现的这些同步原语…
详解Go语言的计时器
Go语言的标准库里提供两种类型的计时器Timer和Ticker。Timer经过指定的duration时间后被触发,往自己的时间channel发送当前时间,此后Timer不再计时。Ticker则是每隔duration时间都会把当前时间点发送给自己的时间channel,利用计时器的…
Go语言sync包的应用详解
在并发编程中同步原语也就是我们通常说的锁的主要作用是保证多个线程或者 goroutine在访问同一片内存时不会出现混乱的问题。今天的文章里让我们回到应用层,聚焦sync包里这些同步原语的应用场景,同时也会介绍sync包中的Pool和Map的应用场景和使用方法。话不多说,让我们开…
学会使用context取消goroutine执行的方法
Go语言里每一个并发的执行单元叫做goroutine,当一个用Go语言编写的程序启动时,其main函数在一个单独的goroutine中运行。main函数返回时,所有的goroutine都会被直接打断,程序退出。除此之外如果想通过编程的方法让一个goroutine中断其他goro…