go goroutine异步处理大量数据,后台管道运行
go goroutine异步处理大量数据,后台管道运行
之前写过一篇文章,也是关于异步处理数据,封装的running,总结缺点可能代码量多而且不方便分割数据,对于我来说当时只实现了一次性将数据放入running运行。虽是后台独立运行但效率并不高。(可能我是一个go的新手玩家,并不能很好的理解,还在摸索学习,望多多指教)
指路之前文章:异步处理封装running
以下是我后来采用的办法,简单易懂
package task
import (
"fmt"
"github.com/jinzhu/gorm"
)
func Worker(id, coin int, jobs <-chan []string) {
fmt.Printf("正在执行%v个任务\n", id)
for job := range jobs {
for _, val := range job {
//此处为自己的处理过程
}
}
}
func test(arr []string) {
//arr 参数数组,这里我分割了数组 50条数据为一个工作任务
jobs := make(chan []string)
total := len(arr)/50 1
start := 0
end := 50
for j := 1; j <= total; j {
// 发送任务
go Worker(j, jobs)
//数据长度判断,防止超额
if end > len(arr) {
end = len(arr)
}
jobs <- arr[start:end]
start = 50
end = 50
}
close(jobs)
}
到此这篇关于“go goroutine异步处理大量数据,后台管道运行”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
Go:Goroutine 的切换过程实际上涉及了什么
GO 语言之 Goroutine 原理解析
Go语言基础(3)
[Go 教程系列笔记] goroutine(协程)
Go 语言到底适合干什么?
golang 深入浅出之 goroutine 理解
Go语言并发
Go语言中通道(channel)用于goroutine通信
简单理解 Goroutine 是如何工作的
兄弟连golang神技(1)-关于 Go 语言的介绍