1. 适用场景:
    适用于协程复用场景

  2. 项目地址:
    https://github.com/panjf2000/ants/blob/master/README_ZH.md

  3. 用法:

    1. 不带参数的函数:

       package main
      
       import (
           "fmt"
           "github.com/panjf2000/ants/v2"
           "sync"
       )
      
       func main() {
           count := 10
           var wg sync.WaitGroup
           defer ants.Release()
           // 创建自定义函数
           task := func() {
               // todo: 业务逻辑处理部分
               fmt.Println("hello world")
               wg.Done()
           }
           // 调用函数
           for i := 0; i < count; i++ {
               wg.Add(1)
               _ = ants.Submit(task)
           }
           wg.Wait()
           // 获取正在运行的协程数量
           fmt.Printf("running goroutines: %d\n", ants.Running())
       }
    2. 带参数的函数:

       package main
      
       import (
           "fmt"
           "github.com/panjf2000/ants/v2"
           "sync"
           "sync/atomic"
       )
      
       func main() {
           count := 10
           var wg sync.WaitGroup
           // 创建自定义函数
           var sum int32
           pool, _ := ants.NewPoolWithFunc(10, func(i interface{}) {
               // todo: 业务逻辑处理部分
               n := i.(int32)
               atomic.AddInt32(&sum, n)
               fmt.Printf("run with %d\n", n)
               wg.Done()
           })
           // 释放协程池
           defer pool.Release()
           // 调用函数
           for i := 0; i < count; i++ {
               wg.Add(1)
               _ = pool.Invoke(int32(i))
           }
           wg.Wait()
           // 获取正在运行的协程数量
           fmt.Printf("running goroutines: %d\n", pool.Running())
       }
文档更新时间: 2024-04-19 15:11   作者:lee