Ai
1 Star 0 Fork 0

jmesyan/armyant

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
loop_task.go 1.46 KB
一键复制 编辑 原始数据 按行查看 历史
yanjq 提交于 2020-06-17 17:43 +08:00 . init
// Copyright 2014 hey Author. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package task
import (
"gitee.com/jmesyan/armyant/utils"
"sync"
"time"
)
type LoopTask struct {
// C is the concurrency level, the number of concurrent workers to run.
C int
Start time.Time
q *utils.Queue
wg sync.WaitGroup
UserData interface{}
}
// Run makes all the requests, prints the summary. It blocks until
// all work is done.
func (b *LoopTask) Run(manager WorkManager) {
b.Start = time.Now()
b.q = utils.NewQueue()
b.runWorkers(manager)
}
func (b *LoopTask) Stop() {
end := false
for !end {
worker := b.q.Pop()
if worker != nil {
worker.(Work).Close(b)
} else {
end = true
}
}
}
func (b *LoopTask) Wait() {
b.wg.Wait()
}
func (b *LoopTask) runWorkers(manager WorkManager) {
b.wg.Add(b.C)
for i := 0; i < b.C; i++ {
task := manager.CreateWork()
b.q.Push(task)
go func() {
task.Init(b)
task.RunWorker(b)
b.wg.Done()
}()
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jmesyan/armyant.git
git@gitee.com:jmesyan/armyant.git
jmesyan
armyant
armyant
v0.0.4

搜索帮助