Sobes.tech
Junior — Middle

Cu ce constă mecanismul de multitasking utilizat în canale pentru schimbul de date între fire sau procese?

sobes.tech AI

Răspuns de la AI

În Go, mecanismul de multitasking bazat pe canale se bazează pe conceptul CSP (Procese Secvențiale de Comunicare). Canalele permit goroutine-urilor (fir de execuție ușor) să schimbe date în siguranță, sincronizând execuția fără blocări explicite.

Un canal funcționează ca o coadă, în care o goroutine poate trimite date, iar alta le primește. Trimiterea și primirea blochează goroutine-ul până când cealaltă parte este gata pentru operație, asigurând sincronizarea și prevenind condițiile de cursă.

Exemplu:

ch := make(chan int)

// Trimiterea datelor într-o goroutine
go func() {
    ch <- 42 // se blochează până când cineva citește
}()

// Primirea datelor
val := <-ch // se blochează până apar datele
fmt.Println(val) // 42

Astfel, canalele implementează un mecanism de multitasking cooperativ, în care goroutine-urile interacționează prin schimbul de mesaje, nu prin memorie partajată.