golang 多线程控制线程数量

golang 多线程控制线程数量,防止使用go命令启动无限协程

库安装命令 go get github.com/msterzhang/gpool

size是任务数

package main

import (
	"fmt"
	"github.com/msterzhang/gpool"
)

func RunTest(i int,pool *gpool.Pool)  {
	fmt.Println(i)
	pool.Done()
}

func main()  {
	size:=2
	pool := gpool.New(size)
	for i:=1;i<=10;i++{
		pool.Add(1)
		go RunTest(i,pool)
	}
	pool.Wait()
}

下面是使用系统库实现的demo

//协程池

package main

import (
    "fmt"
    "sync"
    "time"
)

//协程池

type Pool struct {
    num int //go协程数
    ch chan struct{}//任务队列
}

//初始化协程池

func NewPool(num int) *Pool {
    return &Pool{
        num: num,
        ch: make(chan struct{},num),
    }
}


var wg sync.WaitGroup
//任务处理函数

func Task(p *Pool)  {
    p.ch<- struct{}{}
    wg.Add(1)
    go func() {
        //fmt.Println(time.Now())
        time.Sleep(1*time.Second)
        <-p.c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值