go语言学习3--并发模式
- 并发模式
- 程序可以在分配的时间内完成工作,正常终止
- 程序没有及时完成工作,“自杀”
- 接受到操作系统发送的中断事件,程序立刻尝试清理状态并终止工作。
- 使用通道来监视程序的执行时间,如果程序运行时间太长,可以终止程序
- 程序没有及时完成工作,“自杀”
- 使用通道监视操作系统中断事件(os.signal),打断程序运行
- pool包(sync/pool.go)
- 用于使用有缓冲通道实现资源池,管理可以在任意数量的goroutine之间共享及独立使用的资源。(共享一组静态资源的情况下,如共享数据库连接或者内存缓冲区)。
- 实现io.Closer接口的资源就可以用pool资源池来管理。
- 向pool包提供共享资源的工厂函数和资源数量,由pool包来管理资源池
- work包
- 用于使用无缓冲的通道来创建一个goroutine池,这些goroutine执行并控制一组工作,让其并发执行。
- 因为执行相同的工作,goroutine既不需要工作队列,也不需要相互配合执行
- 当goroutine池中所有的goroutine都忙,无法接收新的工作时,能及时通过通道通知调用者
- 使用无缓冲通道不会有工作在队列里丢失或者卡住,所有工作都会被处理。
- 总结:
- 可以使用通道来控制程序的声明周期(正常终止,中断,超时(“自杀”)等)
- select的default语句可以用来尝试向通道发送或接收数据,而不会阻塞
- 有缓冲的通道适合用来管理可复用的资源
- 有缓冲通道适合用来处理并发任务
- 无缓冲通道可以保证两个goroutine之间的数据交换,且保证发送方对方接收到了数据
相关文章