Nebenläufigkeit in Go
Go Worker Pool
Share a queue of jobs between a fixed number of goroutines to limit how much runs at once.
Das lernst du
- A jobs channel
- Several workers
- Closing results safely
6 jobs, 3 workers
- 1
jobs1 2 3 4 5 6 - 2
3 workersn * n - 3
results1 4 9 16 25 36
A fixed team of workers
A worker pool starts a fixed number of goroutines that all read jobs from one channel. It limits how much work runs at the same time, which protects memory, files and network connections.
Three workers read from jobs until it is closed and send each answer to results. A separate goroutine closes results after every worker has finished, which ends the final range loop. Each result carries its job number, so the order in which workers finish does not matter.
Das Wichtigste
- All workers read from one jobs channel.
close(jobs)tells them to stop.- Results are closed after every worker is done.
Ausführbares Go-Beispiel
main.go
package main
import (
"fmt"
"sync"
)
func worker(jobs <-chan int, results chan<- [2]int, wg *sync.WaitGroup) {
defer wg.Done()
for n := range jobs {
results <- [2]int{n, n * n}
}
}
func main() {
jobs := make(chan int)
results := make(chan [2]int)
var wg sync.WaitGroup
for w := 0; w < 3; w++ {
wg.Add(1)
go worker(jobs, results, &wg)
}
go func() {
for n := 1; n <= 6; n++ {
jobs <- n
}
close(jobs)
}()
go func() {
wg.Wait()
close(results)
}()
squares := make([]int, 7)
for result := range results {
squares[result[0]] = result[1]
}
fmt.Println(squares[1:])
}
[1 4 9 16 25 36]Üben
Öffne das Beispiel im Online-Compiler, ändere einen Wert oder füge eine Zeile hinzu und sage die Ausgabe voraus, bevor du es ausführst. Bring den Code danach absichtlich zum Scheitern und lies die Meldung des Compilers.
Lektion fertig?
Markiere sie als gelernt, um deinen Fortschritt zu verfolgen.
Dein Fortschritt ist in diesem Browser gespeichert Melde dich an, um ihn auf jedem Gerät zu behalten.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
Alle Challenges