- refacor routinePoll CallFunc.

This commit is contained in:
gazebo
2018-07-21 12:52:46 +08:00
parent 48a3c4b5e9
commit 413c9def9d

View File

@@ -58,22 +58,30 @@ func taskFun(taskChan chan *TaskParam, index int) {
for { for {
taskParam := <-taskChan taskParam := <-taskChan
// baseapi.SugarLogger.Debugf("routine:%d, handle task:%v", index, taskParam.handler) // baseapi.SugarLogger.Debugf("routine:%d, handle task:%v", index, taskParam.handler)
taskParam.resultChan <- callHandler(taskParam.handler) result := callHandler(taskParam.handler)
if taskParam.resultChan != nil {
taskParam.resultChan <- result
}
} }
} }
func (p *Pool) callFun(func4Call func(), primaryID string, isAsync bool) chan interface{} {
result := md5.Sum([]byte(primaryID))
resultInt64 := int64(binary.LittleEndian.Uint32(result[8:]))
chanIndex := int(resultInt64 % int64(p.curRoutineCount))
chanParam := &TaskParam{
handler: func4Call,
}
if isAsync {
chanParam.resultChan = make(chan interface{})
}
p.taskChans[chanIndex] <- chanParam
return chanParam.resultChan
}
func (p *Pool) CallFun(func4Call func(), primaryID string) { func (p *Pool) CallFun(func4Call func(), primaryID string) {
if p.curRoutineCount > 0 { if p.curRoutineCount > 0 {
result := md5.Sum([]byte(primaryID)) r := <-p.callFun(func4Call, primaryID, true)
resultInt64 := int64(binary.LittleEndian.Uint32(result[8:]))
chanIndex := int(resultInt64 % int64(p.curRoutineCount))
chanParam := &TaskParam{
handler: func4Call,
resultChan: make(chan interface{}),
}
p.taskChans[chanIndex] <- chanParam
r := <-chanParam.resultChan
if r != nil { if r != nil {
panic(r) panic(r)
} }
@@ -81,3 +89,10 @@ func (p *Pool) CallFun(func4Call func(), primaryID string) {
func4Call() func4Call()
} }
} }
func (p *Pool) CallFunAsync(func4Call func(), primaryID string) {
if p.curRoutineCount == 0 {
panic("CallFunAsync can not run when p.curRoutineCount == 0")
}
p.callFun(func4Call, primaryID, false)
}