在Golang中实现高效分布式任务调度的解决方案,可以使用`sync.WaitGroup`和`goroutine`来实现。以下是一个示例代码:
```go
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup, tasks []string) {
defer wg.Done()
for _, task := range tasks[id*2:id*2+2] {
fmt.Println("Worker", id, "processing task", task)
}
}
func main() {
var wg sync.WaitGroup
tasks := make([]string, 10)
for i := 0; i < 10; i++ {
wg.Add(1)
go worker(i, &wg, tasks)
}
wg.Wait()
}
```
在这个示例中,我们定义了一个`worker`函数,它接受一个整数`id`和一个`sync.WaitGroup`指针以及一个字符串切片。在worker函数中,我们遍历任务列表,并使用`fmt.Println`打印每个任务。
在`main`函数中,我们创建一个`sync.WaitGroup`实例`wg`,并初始化一个包含10个任务的字符串切片`tasks`。然后,我们使用`goroutine`启动10个工作线程,并将`wg`和`tasks`作为参数传递给每个工作线程。
最后,我们调用`wg.Wait()`等待所有工作线程完成。这样,我们可以确保所有的工作线程都已经执行完毕,并且没有任何资源泄漏。