taskPool loop

This commit is contained in:
ken 2025-04-06 07:18:00 +08:00
parent b5ca131619
commit 4d85ba7259

View File

@ -30,7 +30,7 @@ func InitTaskPool(ctx context.Context) {
for model, g := range llm.LLMGroups {
pool := newTaskPool(ctx, g)
TaskPools[model] = pool
go pool.loop()
pool.startloop()
}
})
}
@ -38,8 +38,8 @@ func InitTaskPool(ctx context.Context) {
func newTaskPool(ctx context.Context, g *llm.LLMGroup) *TaskPool {
var queueCap, workers int
if g.IsLocal() {
queueCap = 100*g.Cap()
workers = 100
queueCap = 20*g.Cap()
workers = 20
} else {
workers = 500
queueCap = 10_000*g.Cap()
@ -72,28 +72,37 @@ func (t *TaskPool) remove(client common.WsClient) {
}
func (t *TaskPool) loop() {
func (t *TaskPool) startloop() {
done := t.ctx.Done()
tick := time.NewTicker(PendingTimeOut)
var task *Task
for {
select {
case <-done: return
case <-tick.C:
// 清除pending太久的task
t.queue.RemoveTimeout(PendingTimeOut)
log.Info("[TaskPool] stat", "queueLen", t.queue.Len())
default:
go func(){
var task *Task
for {
task = t.queue.WaitForNew(t.ctx)
select {
case <-done: return
case <-task.ctx.Done():
task.pool.remove(task.client)
case t.sem <- struct{}{}:
go task.do()
}
}
}()
go func(){
for {
select {
case <-done: return
case <-tick.C:
t.stat()
default:
}
}
}()
}
task = t.queue.WaitForNew(t.ctx)
select {
case <-done: return
case <-task.ctx.Done():
task.pool.remove(task.client)
case t.sem <- struct{}{}:
go task.do()
}
}
}
func (t *TaskPool) stat() {
// 清除pending太久的task
t.queue.RemoveTimeout(PendingTimeOut)
log.Info("[TaskPool] stat", "queueLen", t.queue.Len())
}