Quelles méthodes de communication entre processus connais-tu?
sobes.tech IA
Réponse de l'IA
-
Canaux : La principal forma idiomática en Go. Concurrencias tipadas para transmitir valores entre goroutines o procesos (al usar medios externos, como sockets Unix).
// Exemple d'utilisation d'un canal pour la communication entre goroutines ch := make(chan int) go func() { ch <- 1 // envoi de valeur }() value := <-ch // réception de valeur -
Mutex et opérations atomiques : Pour protéger les données partagées lors de l'accès depuis plusieurs processus.
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) } -
Mémoire partagée : Son utilisation directe peut être complexe à gérer et sujette à des conditions de course. Elle est généralement implémentée via d'autres mécanismes (par exemple, mappage de fichiers en mémoire).
-
Interactions réseau (TCP/UDP) : Méthode classique de communication interprocessus, surtout pour les systèmes distribués. Go offre de riches fonctionnalités pour le travail réseau.
// Côté serveur : /* listener, _ := net.Listen("tcp", ":8080") conn, _ := listener.Accept() // lecture/écriture via conn */ // Côté client : /* conn, _ := net.Dial("tcp", "localhost:8080") // lecture/écriture via conn */ -
Mécanismes IPC du système d'exploitation :
- Sockets Unix domain : Méthode efficace pour la communication entre processus sur une même machine.
- Canaux nommés (Pipes) : Pour communication unidirectionnelle ou bidirectionnelle.
- Signaux : Pour notifications asynchrones entre processus.
-
Fichiers : Les processus peuvent échanger des données en écrivant et en lisant dans des fichiers partagés. Il faut utiliser des verrouillages pour éviter les conditions de course.
-
Bases de données et brokers de messages : Pour des scénarios plus complexes, communication asynchrone et fiabilité. Exemples : Kafka, RabbitMQ, Redis (pub/sub), PostgreSQL.