go context专题(一)- go 并发编程基础设施
来源:互联网 发布:手机淘宝等级查询 编辑:程序博客网 时间:2024/05/20 07:32
go 并发编程基础设施
go的并发编程是其最大的特点,go为并发编程提供了两种支撑,一种是在语言层面的支撑,一种是在库的方面的支撑。下面分别做下介绍。
go语言层面并发支撑
go 关键字
go这个关键字提供一个语法糖,用来启动一个goroutinechan
chan 是goroutine进行通信的基本方式,go的编程stype是不要通过共享内存来通信,而是通过通信来共享内存。select
1. 实现多个chan的扇入和扇出功能
2. select closed chan broadcast 机制sync.WaitGroup
用于goroutine之间的同步等待
上述的是个go在语言层面对并发提供的所有支持。
go标准库层面支撑–context
go中的goroutine之间没有父与子的关系,也就没有所谓子进程退出后的通知机制,多个goroutine都是平行的被调度, 多个goroutine怎么协作工作涉及几个方面:通信,同步和等待,通知退出三个方面。
通信方面:chan 通道当然是goroutine之间通信的基础,注意这里的通信主要是指程序的主要数据通道。
同步和等待: 不带缓冲的chan提供了一个天然的同步等待机制;当然sync.WaitGroup也为多个goroutine协同工作提供一种同步等待机制。
通知退出
通知:这个通知通常和第一个通信方面不一样,这个通知特指不是主流的业务数据,它可能是元数据,可能是一种异常的通知数据。要处理这个也好办,大不了我在输入端绑定两个chan ,一个用于业务流数据,一个用于异常通知数据,然后通过select收敛进行处理。这个也可行,但这样毕竟比较费劲,不是一个通用的解决办法。
退出:goroutine之间没有父子关系,如何通知goroutine进行退出,担任也可以通过一个单独的chan可以做到,利用select closed chan broadcast 机制,比如检测到一个chan被关闭,就意味着收到通知,准备退出。
在go语言提供的层面上处理通知和退出有点繁琐,有时goroutine调用goroutine,然后goroutine又调用了新的goroutine形成一个调用链条,我怎么通知一个调用链的goroutine退出,这如果依靠语言层面的支持显然比较难处理。为此go 1.7提供了一个标准库context来解决两个问题:退出通知和元数据传递。
context库的设计目的就是跟踪 goroutine调用树,并在在这些调用树中传递通知和元数据。这个目的清楚了,后续有一门专门的文章介绍conetxt相关信息。
- go context专题(一)- go 并发编程基础设施
- Go语言并发编程(一)
- Go 并发编程基础(一)goroutine,channel
- Go并发编程
- Go并发编程实践
- Go并发编程实践
- Go并发编程实践
- Go并发编程
- GO语言并发编程
- go语言并发编程
- go语言并发编程
- Go并发编程之Go语言概述
- Go语言并发编程(二)
- Go并发编程基础(译)
- Go学习笔记六(并发编程)
- Go编程基础—并发(concurrency)
- 《Go语言编程》-并发编程
- Go语言并发模型:使用 context
- python求解在给定递减数组中寻找两个数和等于定值,乘积最小
- Professor Ben 唯一分解定理:因子的因子个数
- oracle高级查询(二)
- 第三课: 易语言大漠剑侠情缘多线程木人巷检测游戏开启
- 对于并发线程数的设置的一些理解
- go context专题(一)- go 并发编程基础设施
- 文章标题
- 【bzoj2796】 [Poi2012]Fibonacci Representation
- matlab2c使用c++实现matlab函数系列教程-conv函数
- ajax day1
- Gym 101190H Hard Refactoring
- 并查集—C
- go语言语法笔记
- 旋转向量和旋转矩阵的互转换