Go 高性能实用指南
package main
import (
"fmt"
"sync"
)
// 定义一个简单的任务接口
type Task interface {
Run() error
}
// 任务的实现
type SampleTask struct{}
func (t *SampleTask) Run() error {
fmt.Println("任务运行中...")
return nil
}
// 任务执行器的定义
type Executor interface {
Execute(Task) error
}
// 任务执行器的实现
type executor struct {
workerCount int
workerPool chan bool
wg sync.WaitGroup
}
func NewExecutor(workerCount int) Executor {
return &executor{
workerCount: workerCount,
workerPool: make(chan bool, workerCount),
}
}
func (e *executor) Execute(task Task) error {
e.wg.Add(1)
e.workerPool <- true
go func() {
defer func() {
<-e.workerPool
e.wg.Done()
}()
if err := task.Run(); err != nil {
fmt.Printf("任务执行出错: %v\n", err)
}
}()
return nil
}
func (e *executor) Wait() {
e.wg.Wait()
}
func main() {
// 创建一个有5个工作者的执行器
exec := NewExecutor(5)
// 创建并执行任务
task := &SampleTask{}
if err := exec.Execute(task); err != nil {
fmt.Printf("任务提交失败: %v\n", err)
}
// 等待所有任务完成
exec.Wait()
}
这段代码定义了一个简单的任务接口Task
和一个任务执行器Executor
的实现。任务执行器使用一个通道作为工作池来控制并发执行的任务数量。在main
函数中,我们创建了一个执行器并提交了一个任务,然后等待所有任务执行完毕。这个例子展示了如何使用Go语言管理并发任务的基本方法。
评论已关闭