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")
}

上一篇:zzuli oj 1122 小明同学的调查作业


下一篇:laravel模板布局