Sobes.tech
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.