/async

async

Primary LanguageGoMIT LicenseMIT

golang async

简介

简单快速实现异步并发任务,避免繁琐代码 并将任务结果集中返回 类似python asyncio.gather的语法

应用场景

这在多个耗时长的网络请求(如:调用API接口)时非常有用。其可将顺序执行变为并行计算,可极大提高程序的执行效率。也能更好的发挥出多核CPU的优势。

使用

go get github.com/jianmaikj/async

demo

package main

import (
	"github.com/jianmaikj/async"
	"runtime"
	"fmt"
	"time"
)

func request(params ...interface{}) (res interface{}) {
	//sql request...
	return
}

func main() {
	// 建议程序开启多核支持
	runtime.GOMAXPROCS(runtime.NumCPU())
	// 耗时操作

	// 开启并发操作
	t := time.Now()
	task1 := &async.Task{
		Name:    "1",
		Handler: request1,
		Params:  []interface{}{1},
	}
	task2 := &async.Task{
		Name:    "2",
		Handler: request2,
		Params:  []interface{}{2},
	}
	res := async.Gather(task1, task2)
	//结果是一个map[string][]reflect.Value返回值,可以根据Name取结果,如果没有设定Name则默认为任务顺序数字的字符串:"1","2",...,例如res["1"]即第一个任务结果集
	fmt.Println(res["1"], "time::", time.Now().Sub(t))

	// 或
	tasks := async.NewTasks()
	for i := 0; i <= 2; i++ {
		tasks = append(tasks, &async.Task{
			Handler: r1,
			Params:  []interface{}{1},
		})
	}
	res := async.Gather(tasks...)
	fmt.Println(res["1"])
}