并发模式

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