您的位置:首页 > 编程语言 > Go语言

go 语言第三方库parallel的并行使用

2017-09-07 10:54 99 查看
下面介绍一下go语言第三方库parallel的并行使用:

https://github.com/buptmiao/parallel中可以查看库的使用用例。

parallel是一个go语言并行程序库, 用于不改变现有接口声明前提下的业务聚合或者重构.

如果需要循环某一个函数(oneDBAlarmCodeAnaylse),只是参数不同(db, userinfo),则可以使用parallel,

它可以并行运行,极大提高运行速度。

SetMaxProcs()函数表明parallel只能使用所有可用CPU的一半。

结果results中就是函数oneDBAlarmCodeAnaylse返回的[]bson.M类型的数据,

它会把leng个[]bson.M数据存在[][]bson.M类型的results中。

func (this *PublicReport) ProvinceAlmCodeAlmTrendAddHour(userinfo bson.M) {
SetMaxProcs()
var err interface{}
length := len(userinfo)
p := parallel.NewParallel()
pchild := make([]*parallel.Parallel, leng)
results := make([][]bson.M, length)
for i := 0; i < length; i++ {
db := userinfo[i]
pchild[i] = p.NewChild()
pchild[i].Except(ExceptionHandler).SetReceivers(&err)
pchild[i].Register(this.oneDBAlarmCodeAnaylse,db, userinfo).SetReceivers(&results[i])
}
p.Run()
if nil != err {
returnVal := make(bson.M)
this.HandleErrorTwo(err.(error), "AlarmCodeAnaylse", returnVal)
}
log.Error("results", len(results), results)
}
func (this *PublicReport) oneDBAlarmCodeAnaylse(db string, userinfo bson.M) []bson.M {
}

func SetMaxProcs() {
maxCPU := runtime.NumCPU()
halfCPU := int(0.5 * float32(maxCPU))
if halfCPU < 1 {
halfCPU = 1
}
runtime.GOMAXPROCS(halfCPU)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: