go语言简单的并行控制方法
来源:互联网 发布:软件功能需求文档 编辑:程序博客网 时间:2024/06/05 18:32
代码
for gFinishCnt < gTotalCnt {//没有全部完成就一直执行,需要想好失败时也能够退出的逻辑。 sg := segList[i%gTotalCnt] if time.Now().Sub(pTime).Seconds() >= 1 { fmt.Printf("seg=%v asNum=%d i=%d/%d/%d/%d\n", sg.seg, sg.asNum, i, gRuningCnt, gFinishCnt, gTotalCnt) pTime = time.Now() }//每秒打印一次。控制打印频率 //超过最大并行Thread数,则等待10ms if gRuningCnt > MAX_RUNING_CMD { time.Sleep(time.Second / 100) continue } i++ //已经完成的Thread,直接返回 if (sg.asNum > 0) || (ASNUM_FAIL == sg.asNum) { continue } if ASNUM_WAITING == sg.asNum { if time.Now().After(sg.tStart.Add(time.Second * ((MAX_RUNING_CMD + 99) / 100))) { //超时Thread的处理 } continue } //启动一个新Thread去完成一个Task //Task的初始化必须在本父线程中进行,否则会乱序 //因为go启动线程是有延时的。 sg.asNum = ASNUM_WAITING addCnt(0, 1)//添加一个runing的thread go asNumStatHandler(sg)}var lock sync.Mutexfunc addCnt(finishCnt, runingCnt int) {lock.Lock()defer lock.Unlock()gFinishCnt += finishCnt //完成Thread数gRuningCnt += runingCnt //running Thread数
}
//子线程执行Handler
func asNumStatHandler(seg *IpSeg_S) {
……
addCnt(1, -1) //finish的加1,running的减1
……
}
0 0
- go语言简单的并行控制方法
- Go语言的并发和并行
- Go语言的并发和并行
- go语言的控制语句
- go语言 -并行程序 wordcount
- go语言写的并行排序算法(快速排序)
- go 语言第三方库parallel的并行使用
- [go语言]控制语句
- Go语言 简单的的socket文件传输
- Go语言简单的TCP编程
- Go语言 简单的http服务器示例
- Go语言 简单的爬虫示例(1)
- Go语言实现简单的留言本
- Go语言ssh简单的使用
- Go语言的gob简单使用
- Go语言实现简单的文件服务器
- go语言的cgo简单教程
- go语言实现的简单web服务器
- mysql数据库触发器(六)
- java中byte数组与int类型的转换(两种方式)
- Opencv相机标定和三维重建
- Swift enumerate函数
- 190. Reverse Bits
- go语言简单的并行控制方法
- Lesser General Public License
- 技术推广
- adb 工具的一些常识
- (转)经典的位运算实例
- VIM快捷键
- MindManager怎么处理出现的C++错误
- Sign up Error:(23, 17) Failed to resolve: junit:junit:4.12
- js 高程学习总结 第七章 函数表达式