Junior — Middle
Czy możliwe jest jednoczesne zapisywanie danych do kanału bez użycia bufora?
sobes.tech AI
Odpowiedź od AI
W języku Go kanały mogą być z buforem i bez bufora. W kanale bez bufora zapis (wysyłanie) blokuje się, dopóki inna gorutyna nie odczyta wartości z kanału.
Równoczesne zapisanie do kanału bez bufora jest niemożliwe, ponieważ wysyłanie blokuje się do momentu odbioru, i tylko jeden nadawca może przekazać dane w danym momencie.
Jeśli konieczne jest wykonanie równoczesnego zapisu bez blokowania, używa się kanałów z buforem, w których nadawca może umieścić dane w buforze bez oczekiwania na natychmiastowy odbiór.
Przykład kanału bez bufora:
ch := make(chan int) // kanał bez bufora
// Wysyłanie blokuje się, dopóki ktoś nie odczyta
ch <- 1
Aby umożliwić równoczesny zapis bez blokowania, potrzebny jest bufor:
ch := make(chan int, 2) // bufor na 2 elementy
ch <- 1 // nie blokuje się
ch <- 2 // nie blokuje się
Podsumowując: bez bufora, równoczesny zapis jest niemożliwy.