ants库的使用

目录

ants

ants库是一个利用到了池化技术的goroutine库,它实现了对大量goroutine的自动调度、复用、定期清理过期的goroutines、可以在创建池的时候限制goroutine的数量,复用资源,从而可以高效的执行任务。

提供如下接口

  • 获取运行中的 goroutine 数量

  • 动态调整 Pool 大

  • 释放 Pool

  • 重启 Pool

pool.go提供了ants.NewPool(创建协程池)、 创建Pool对象需调用ants.NewPool(size, options)函数,返回一个pool的指针 在NewPool中lock,其实给lock初始化了一个自旋锁,这里是利用atomic.CompareAndSwapUint32()这个原子操作实现的,在加锁失败后不会等待,而是继续尝试,提高了加锁减锁的性能 Submit(task func())提交任务
传进去的是任务函数

package main

import (
	"fmt"
	"sync"
	"time"

	"github.com/panjf2000/ants"
)

func Task() {
	fmt.Println("Hello,This is a tesk")
	time.Sleep(2 * time.Second)
}

var wg sync.WaitGroup

func main() {
	pool, _ := ants.NewPool(5)
	defer pool.Release()

	task := func() {
		Task()
		wg.Done()
	}

	for i := 0; i < 10; i++ {
		wg.Add(1)
		pool.Submit(task)
	}

	wg.Wait()
}
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦