go-基础-任务池-sync.WaitGroup

package main

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

func worker(id int) {
	fmt.Printf("Worker %d starting\n", id)
	time.Sleep(time.Second)
	fmt.Printf("Worker %d done\n", id)
}
func main() {
	// 多任务进程组处理器
	var wg sync.WaitGroup
	for i := 1; i <= 5; i++ {
		fmt.Println(" start for", i)
		fmt.Println("add ", i)
		wg.Add(1) // 启动n个goroutine并为每个goroutine增加wg计数器,说白了,就是分配n个处理者worker(协程)来处理对应的任务。
		i := i    // 避免在每个闭包中重复使用相同的值,就是说这里的值要是没有再次赋值,会导致重复
		go func() {
			defer wg.Done() // 等待进程中的done标识,一旦有人处理完成,则开始接下一个任务。
			// 待处理的任务
			fmt.Println("worker", i)
			worker(i)
		}()
		fmt.Println("end", i)
	}
	fmt.Println("out for")
	wg.Wait() // 阻塞,设置等待任务完成,当计数器为0,才放行。类似async-await
	fmt.Println("after wait")
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值