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()
}
相关推荐
Victor35611 分钟前
Hibernate(13) Hibernate的一级缓存是什么?
后端
毕设源码-赖学姐15 分钟前
【开题答辩全过程】以 基于SpringBoot的健身房管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
Victor35617 分钟前
Hibernate(14)什么是Hibernate的二级缓存?
后端
czlczl2002092519 分钟前
SpringBoot自动配置AutoConfiguration原理与实践
开发语言·spring boot·后端
李迟31 分钟前
Golang实践录:使用sqlx操作sqlite3数据库
数据库·golang·sqlite
张较瘦_41 分钟前
JavaScript | 数组方法实战教程:push()、forEach()、filter()、sort()
开发语言·javascript·ecmascript
Filotimo_1 小时前
EntityGraph的概念
java·开发语言·数据库·oracle
wregjru1 小时前
【读书笔记】Effective C++ 条款1~2 核心编程准则
java·开发语言·c++
heartbeat..1 小时前
Servlet 全面解析(JavaWeb 核心)
java·网络·后端·servlet
lingran__1 小时前
C语言自定义类型详解 (1.1w字版)
c语言·开发语言