Jaké způsoby komunikace mezi procesy znáš?
sobes.tech AI
Odpověď od AI
-
Kanály: Hlavní idiomatický způsob v Go. Typovaná konkurence pro přenos hodnot mezi gorutinami nebo procesy (při použití externích prostředků, například unixových socketů).
// Příklad použití kanálu pro komunikaci mezi gorutinami ch := make(chan int) go func() { ch <- 1 // odeslání hodnoty }() value := <-ch // přijetí hodnoty -
Mutexy a atomické operace: Pro ochranu sdílených dat při přístupu z více procesů.
import ( "sync" "sync/atomic" ) var mu sync.Mutex var counter int func incrementWithMutex() { mu.Lock() counter++ mu.Unlock() } var atomicCounter int32 func incrementWithAtomic() { atomic.AddInt32(&atomicCounter, 1) } -
Sdílená paměť: Přímé použití může být složité na správu a náchylné ke stavu závodu. Obvykle se realizuje přes jiné mechanismy (například mapování souborů do paměti).
-
Síťové interakce (TCP/UDP): Klasický způsob meziprocesové komunikace, zejména pro distribuované systémy. Go nabízí bohaté možnosti práce se sítí.
// Na straně serveru: /* listener, _ := net.Listen("tcp", ":8080") conn, _ := listener.Accept() // čtení/zápis dat přes conn */ // Na straně klienta: /* conn, _ := net.Dial("tcp", "localhost:8080") // čtení/zápis dat přes conn */ -
Mechanismy IPC operačního systému:
- Unixové doménové sockety: Efektivní způsob komunikace mezi procesy na stejném stroji.
- Pojmenované kanály (Pipes): Pro jednosměrnou nebo obousměrnou komunikaci.
- Signály: Pro asynchronní oznámení mezi procesy.
-
Soubory: Procesy mohou sdílet data zapisováním a čtením ze sdílených souborů. Je nutné používat zámky, aby se zabránilo stavu závodu.
-
Databáze a brokeri zpráv: Pro složitější scénáře, asynchronní komunikaci a zajištění spolehlivosti. Příklady: Kafka, RabbitMQ, Redis (pub/sub), PostgreSQL.