Golang 批量执行/并发执行

提到Golang,都说Golang 天生高并发。所以分享一下我认为的Golang高并发精髓

简单的并发执行util

go 复制代码
package util
import (
	"context"
	"sync"
)

type batchRunner struct {
	BatchSize int
	ctx       context.Context
	channel   chan func()
	wg        sync.WaitGroup
}

func NewBatchRunner(ctx context.Context, batch int) *batchRunner {
	r := &batchRunner{
		BatchSize: batch,
		channel:   make(chan func()),
		ctx:       ctx,
	}
	for batchIdx := 0; batchIdx < r.BatchSize; batchIdx++ {
		r.wg.Add(1)
		go func() {
			for r.ctx.Err() == nil {
				f, open := <-r.channel
				if !open && f == nil {
					break
				}
				f()
			}
			r.wg.Done()
		}()
	}
	return r
}

func (r *batchRunner) Run(handel func()) {
	r.channel <- handel
}

func (r *batchRunner) Wait() {
	close(r.channel)
	r.wg.Wait()
}
相关推荐
golang学习记8 小时前
🍵 Go Queryx 入门指南:让数据库操作像喝奶茶一样丝滑!
后端
kaikaile19959 小时前
基于MATLAB的直接序列扩频(DSSS)通信系统仿真实现
开发语言·matlab
stand_forever9 小时前
PHP客户端调用由Go服务端GRPC接口
rpc·golang·php
czhc11400756639 小时前
C#1114 枚举
开发语言·c#
z_鑫9 小时前
Java线程池原理深度解析
java·开发语言·后端
小呀小萝卜儿9 小时前
2025-11-14 学习记录--Python-特征归一化方法(Min-Max或StandardScaler)
开发语言·python·学习
雪域迷影9 小时前
C++ 11 中的move赋值运算符
开发语言·c++·move
华仔啊10 小时前
MyBatis-Plus 不只是简化CRUD!资深架构师总结的15个高阶用法
java·后端·mybatis
jf加菲猫10 小时前
第2章 Hello World
开发语言·c++·qt·ui
吴名氏.10 小时前
电子书《ASP.NET MVC企业级实战》
后端·asp.net·mvc·编程语言