mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
优化代码规范
This commit is contained in:
@@ -22,10 +22,12 @@ type Concurrent struct {
|
||||
|
||||
tasks chan task
|
||||
cbChannel chan func(error)
|
||||
open int32
|
||||
open int32
|
||||
}
|
||||
|
||||
/*
|
||||
OpenConcurrentByNumCPU 函数使用说明
|
||||
|
||||
cpuMul 表示cpu的倍数
|
||||
建议:(1)cpu密集型 使用1 (2)i/o密集型使用2或者更高
|
||||
*/
|
||||
@@ -35,10 +37,10 @@ func (c *Concurrent) OpenConcurrentByNumCPU(cpuNumMul float32) {
|
||||
}
|
||||
|
||||
func (c *Concurrent) OpenConcurrent(minGoroutineNum int32, maxGoroutineNum int32, maxTaskChannelNum int) {
|
||||
if atomic.AddInt32(&c.open,1) > 1 {
|
||||
if atomic.AddInt32(&c.open, 1) > 1 {
|
||||
panic("repeated calls to OpenConcurrent are not allowed!")
|
||||
}
|
||||
|
||||
|
||||
c.tasks = make(chan task, maxTaskChannelNum)
|
||||
c.cbChannel = make(chan func(error), maxTaskChannelNum)
|
||||
|
||||
@@ -66,7 +68,7 @@ func (c *Concurrent) AsyncDoByQueue(queueId int64, fn func() bool, cb func(err e
|
||||
}
|
||||
|
||||
if queueId != 0 {
|
||||
queueId = queueId % maxTaskQueueSessionId+1
|
||||
queueId = queueId%maxTaskQueueSessionId + 1
|
||||
}
|
||||
|
||||
select {
|
||||
|
||||
@@ -8,12 +8,13 @@ import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
|
||||
"context"
|
||||
"github.com/duanhf2012/origin/v2/log"
|
||||
"github.com/duanhf2012/origin/v2/util/queue"
|
||||
"context"
|
||||
)
|
||||
|
||||
var idleTimeout = int64(2 * time.Second)
|
||||
|
||||
const maxTaskQueueSessionId = 10000
|
||||
|
||||
type dispatch struct {
|
||||
@@ -33,7 +34,7 @@ type dispatch struct {
|
||||
waitDispatch sync.WaitGroup
|
||||
|
||||
cancelContext context.Context
|
||||
cancel context.CancelFunc
|
||||
cancel context.CancelFunc
|
||||
}
|
||||
|
||||
func (d *dispatch) open(minGoroutineNum int32, maxGoroutineNum int32, tasks chan task, cbChannel chan func(error)) {
|
||||
@@ -44,7 +45,7 @@ func (d *dispatch) open(minGoroutineNum int32, maxGoroutineNum int32, tasks chan
|
||||
d.workerQueue = make(chan task)
|
||||
d.cbChannel = cbChannel
|
||||
d.queueIdChannel = make(chan int64, cap(tasks))
|
||||
d.cancelContext,d.cancel = context.WithCancel(context.Background())
|
||||
d.cancelContext, d.cancel = context.WithCancel(context.Background())
|
||||
d.waitDispatch.Add(1)
|
||||
go d.run()
|
||||
}
|
||||
@@ -56,7 +57,7 @@ func (d *dispatch) run() {
|
||||
for {
|
||||
select {
|
||||
case queueId := <-d.queueIdChannel:
|
||||
d.processqueueEvent(queueId)
|
||||
d.processQueueEvent(queueId)
|
||||
default:
|
||||
select {
|
||||
case t, ok := <-d.tasks:
|
||||
@@ -65,13 +66,13 @@ func (d *dispatch) run() {
|
||||
}
|
||||
d.processTask(&t)
|
||||
case queueId := <-d.queueIdChannel:
|
||||
d.processqueueEvent(queueId)
|
||||
d.processQueueEvent(queueId)
|
||||
case <-timeout.C:
|
||||
d.processTimer()
|
||||
case <- d.cancelContext.Done():
|
||||
atomic.StoreInt64(&idleTimeout,int64(time.Millisecond * 5))
|
||||
case <-d.cancelContext.Done():
|
||||
atomic.StoreInt64(&idleTimeout, int64(time.Millisecond*5))
|
||||
timeout.Reset(time.Duration(atomic.LoadInt64(&idleTimeout)))
|
||||
for i:=int32(0);i<d.workerNum;i++{
|
||||
for i := int32(0); i < d.workerNum; i++ {
|
||||
d.processIdle()
|
||||
}
|
||||
}
|
||||
@@ -93,7 +94,7 @@ func (d *dispatch) processTimer() {
|
||||
d.idle = true
|
||||
}
|
||||
|
||||
func (d *dispatch) processqueueEvent(queueId int64) {
|
||||
func (d *dispatch) processQueueEvent(queueId int64) {
|
||||
d.idle = false
|
||||
|
||||
queueSession := d.mapTaskQueueSession[queueId]
|
||||
@@ -161,20 +162,19 @@ func (d *dispatch) pushQueueTaskFinishEvent(queueId int64) {
|
||||
d.queueIdChannel <- queueId
|
||||
}
|
||||
|
||||
func (c *dispatch) pushAsyncDoCallbackEvent(cb func(err error)) {
|
||||
func (d *dispatch) pushAsyncDoCallbackEvent(cb func(err error)) {
|
||||
if cb == nil {
|
||||
//不需要回调的情况
|
||||
return
|
||||
}
|
||||
|
||||
c.cbChannel <- cb
|
||||
d.cbChannel <- cb
|
||||
}
|
||||
|
||||
func (d *dispatch) close() {
|
||||
atomic.StoreInt32(&d.minConcurrentNum, -1)
|
||||
d.cancel()
|
||||
|
||||
|
||||
breakFor:
|
||||
for {
|
||||
select {
|
||||
@@ -195,7 +195,7 @@ func (d *dispatch) DoCallback(cb func(err error)) {
|
||||
buf := make([]byte, 4096)
|
||||
l := runtime.Stack(buf, false)
|
||||
errString := fmt.Sprint(r)
|
||||
log.Dump(string(buf[:l]),log.String("error",errString))
|
||||
log.Dump(string(buf[:l]), log.String("error", errString))
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
@@ -59,16 +59,16 @@ func (w *worker) exec(t *task) {
|
||||
t.cb = func(err error) {
|
||||
cb(errors.New(errString))
|
||||
}
|
||||
log.Dump(string(buf[:l]),log.String("error",errString))
|
||||
w.endCallFun(true,t)
|
||||
log.Dump(string(buf[:l]), log.String("error", errString))
|
||||
w.endCallFun(true, t)
|
||||
}
|
||||
}()
|
||||
|
||||
w.endCallFun(t.fn(),t)
|
||||
w.endCallFun(t.fn(), t)
|
||||
}
|
||||
|
||||
func (w *worker) endCallFun(isDocallBack bool,t *task) {
|
||||
if isDocallBack {
|
||||
func (w *worker) endCallFun(isDoCallBack bool, t *task) {
|
||||
if isDoCallBack {
|
||||
w.pushAsyncDoCallbackEvent(t.cb)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user