使用协程池

import (
	"github.com/sohaha/zlsgo/zpool"
)

func main(){
  // 初始化池,支持同时 100 个处理
  p := zpool.New(100)

  // 回收资源
  defer p.Close()

  // 捕获协程池内产生的恐慌
  p.PanicFunc(func(err error) {
    // ...
  })

  // 模拟 1000 个处理
  for i := 0; i < 1000; i++ {
	  _ = p.Do(func(){
      // 耗时处理
    })
  }
}

执行并发

// 如果当前没有空闲协程会直接堵塞
p.Do(func(){})

协程池容量

// 1. 初始化时直接设置池容量与最大容量
p := zpool.New(100,1000)

// 2. 手动调整协程池容量,最大值不能大于初始化时设置的最大容量
p.AdjustSize(1000)

协程池控制

// 暂停池
p.Pause()

// 继续执行
p.Continue()

// 关闭池
p.Close()