Go语言的并发简单总结

Goexit结束当前goroutine,会调用defer, 不会产生panic
1.6.扇入扇出 fan in\fan out

1.7 通知退出机制
通知退出机制是学习使用context库的基础

Lable:
for{
	select {
	case ch<-rand.Int():
	case <-done:
		break Lable
	}
}

2.并发范式
2.1 生成器
2.2 管道
输入输出都是chan的时候,链式调用
2.3 每个请求一个goroutine
使用waitgroup同步处理过程,结束后统一处理结果,结果处理完使用close通道告诉后面range通道结束获取到完整结果。

工作通道读出来就go走,读到多少个数据就创建多少个协程,容易爆炸。
可以控制最大数量,弄一个有缓冲的channel,新建一个协程写入一个,表示占空,处理完再读出来,表示用完了挪开。问题是协程会一直创建销毁。
2.4 固定worker工作池
分出n个协程来一起读通道,读到就操作,操作完了再读。工作池是固定的,没有数据时就会有n个占用的通道等待读取。

2.5 future模式
一个流程需要多个子调用,且这些子调用相互没有依赖。
新建一个协程用来读取任务、处理任务并返回任务,主线只需要把任务放进去,在需要的时候读取出来,不影响总进度。也是占坑方式。

3.context
设计目的:
1.退出通知机制 主要目的
2.传递数据 额外功能,因为传递的都是interface{},编译器不能进行严格的类型校验。
应该传递的消息:
日志信息、调试信息、不影响业务的可选数据。

你可能感兴趣的:(Go语言基础教程)