这段时间由于项目的需要,本人正在研究关于如何优雅的进行go的并发,以下是结合资料和视频的结果,文末会给出参考资料
Go语言的并发模型主要通过goroutine和channel实现,通过这个我们可以更有效地使用IO和CPU
这里我们围绕生成一个随机数并且返回他的平方数的场景来讲解
Generator模式
这里我们设置两个函数,一个是生成随机数,一个是生成平方数
func gen(nums ...int) <-chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
close(out)
}()
return out
}
func sq(in <-chan int) <-chan int {
out := make(chan int)
go func() {
for n := range in {
out <- n * n
}
close(out)
}()
return out
}
这就是generator模型,将每个并发阶段分开执行,最后汇总到一起
Pipeline模式
顾名思义,就是像一个管道一样联通在一起,从上面流通到下面,此处有一张图,可以更好的说明关系