تمرين إعادة البناء
Worker Pool
أعد كتابة برنامج Go يوزع مهاما على workers.
go
~22 دقيقة
متوسط
أعد بناء الكود
Rebuild
هذا هو الكود. اكتبه بنفسك.
الكود المرجعي
package main
import (
"fmt"
"sort"
"sync"
)
type Job struct {
ID int
Number int
}
type Result struct {
ID int
Square int
}
func worker(jobs <-chan Job, results chan<- Result, wg *sync.WaitGroup) {
defer wg.Done()
for job := range jobs {
results <- Result{ID: job.ID, Square: job.Number * job.Number}
}
}
func main() {
jobs := make(chan Job)
results := make(chan Result)
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go worker(jobs, results, &wg)
}
go func() {
for id, number := range []int{2, 4, 6, 8, 10} {
jobs <- Job{ID: id, Number: number}
}
close(jobs)
wg.Wait()
close(results)
}()
var collected []Result
for result := range results {
collected = append(collected, result)
}
sort.Slice(collected, func(i, j int) bool {
return collected[i].ID < collected[j].ID
})
for _, result := range collected {
fmt.Printf("job %d -> %d\n", result.ID, result.Square)
}
}اكتب هنا