Junior — Middle
W jaki sposób odbywa się wymiana sygnałów za pomocą kanałów w systemie programowania?
sobes.tech AI
Odpowiedź od AI
W języku Go (Golang) kanały (channels) służą do wymiany sygnałów i danych między gorutynami, zapewniając synchronizację i komunikację.
Kanał to typowany przewód, przez który można wysyłać i odbierać wartości. Wysyłanie i odbieranie na kanale blokuje gorutynę, dopóki druga strona nie będzie gotowa na przyjęcie lub wysłanie danych, co pozwala na efektywną synchronizację wykonania.
Przykład wymiany sygnałów za pomocą kanału:
package main
import (
"fmt"
"time"
)
func worker(done chan bool) {
fmt.Println("Praca rozpoczęta")
time.Sleep(time.Second) // symulacja pracy
fmt.Println("Praca zakończona")
done <- true // wysyłamy sygnał zakończenia
}
func main() {
done := make(chan bool)
go worker(done) // uruchamiamy gorutynę
<-done // czekamy na sygnał zakończenia
fmt.Println("Funkcja główna zakończona")
}
W tym przykładzie kanał done służy do przekazywania sygnału o zakończeniu pracy gorutyny worker. Funkcja główna blokuje się na odczycie z kanału, aż otrzyma sygnał, co pozwala na poprawną synchronizację wykonania.