go语言学习3--并发模式

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

相关文章