Junior — Middle
Vai jūs varētu sniegt piemēru scenārijam, kurā tiek izmantots buferēts kanāls datu pārraidīšanai?
sobes.tech AI
Atbilde no AI
Go kanāli ar buferi tiek izmantoti, kad nepieciešams pārsūtīt datus starp gorutīnām, bet nevēlam bloķēt sūtītāju uzreiz, ja saņēmējs vēl nav gatavs pieņemt datus. Piemēram, scenārijā, kur ražotājs ģenerē datus ātrāk nekā tos apstrādā patērētājs, buferētais kanāls ļauj uzkrāt vairākus elementus, negaidot ražotāju.
Piemērs:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int, 3) // buferis 3 elementiem
// Ražotājs
go func() {
for i := 1; i <= 5; i++ {
fmt.Printf("Sūta: %d\n", i)
ch <- i // neblokē, kamēr buferis nav pilns
}
close(ch)
}()
// Patērētājs
time.Sleep(time.Second) // simulē kavēšanos
for val := range ch {
fmt.Printf("Saņemts: %d\n", val)
time.Sleep(500 * time.Millisecond) // lēna apstrāde
}
}
Šajā piemērā ražotājs var nosūtīt pirmās 3 vērtības uz buferēto kanālu bez bloķēšanas, un pēc tam gaidīs, kamēr patērētājs atbrīvos vietu.