话不多说,上代码:
CpuNum := 4
runtime.GOMAXPROCS(CpuNum)
PageNum := int(allCount) / CpuNum
PageNum2 := int(allCount) % CpuNum
var over = make(chan int, CpuNum)
for i := 0; i < CpuNum; i++ {
var begin, end int
if i == 0 {
begin = (((i + 1 - 1) * PageNum) + 1) - 1
end = ((i + 1) * PageNum) - 1
} else {
if i != CpuNum-1 {
begin = (((i + 1 - 1) * PageNum) + 1)
end = ((i + 1) * PageNum) - 1
} else {
begin = (((i + 1 - 1) * PageNum) + 1)
end = ((i+1)*PageNum + PageNum2) - 1
}
}
fmt.Println("begin:", begin, "end:", end)
listPrj := prjArr[begin:end]
fmt.Println("xianshishu:", i)
saleDBCon3, _ := db.ConnSaleDB()
go GoCalc(request, listPrj, kjInfoArr, over, saleDBCon3)
}
for k := 0; k < CpuNum; k++ {
}
func GoCalc(request *module.Request, listInfo []*module.SALE_PROJECT, kjInfo interface{}, over chan int, saleDBCon *db.DBConn) {
for result := range listInfo {
db.TxStart(saleDBCon)
resultCn, err := db.GetChipInfo(request, listInfo[result], saleDBCon)
if err != nil {
fileLog.LogFile.E(fmt.Sprintf("单个计奖错误:%v", err))
}
err = CalcOneBonus(request, resultCn, kjInfo, saleDBCon)
if err != nil {
fmt.Println("单个计奖错误:", err)
}
}
over
}
单线程下是可以正常运行的,但由于数据比较大,性能有要求,就想使用多线程去处理数据,但老是killed,求大神帮找出问题啊!