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

下面介绍一下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)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值