当前位置: 首页 > 工具软件 > gorp > 使用案例 >

linux 单线程运行,单线程运行没有问题的,但是多进程就会killed,环境Linux。使用的是go-oci8+gorp做持久化。求大神解决!...

焦博实
2023-12-01

话不多说,上代码:

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,求大神帮找出问题啊!

 类似资料: