
Pattern di concorrenza
Worker pool, pipeline, fan-out/fan-in, cancellation, context, errgroup, semafori
1Cos'è un worker pool in Go?
Cos'è un worker pool in Go?
Risposta
Un worker pool è un pattern di concorrenza che utilizza un numero fisso di goroutine (worker) per elaborare task provenienti da un canale condiviso. Questo pattern consente di limitare il numero di goroutine attive e controllare il consumo di risorse di sistema. A differenza della creazione di una goroutine per task, il worker pool riutilizza un insieme di worker per elaborare un grande volume di task in modo efficiente.
2Qual è il vantaggio principale dell'uso di un worker pool invece di creare una goroutine per task?
Qual è il vantaggio principale dell'uso di un worker pool invece di creare una goroutine per task?
Risposta
Limitare il numero di goroutine attive consente di controllare il consumo di risorse di sistema (memoria e CPU) ed evitare il sovraccarico. Creare una goroutine per task può generare migliaia o milioni di goroutine simultanee, saturando lo scheduler ed esaurendo la memoria. Il worker pool mantiene un numero ottimale di worker che elaborano i task in sequenza, garantendo prestazioni prevedibili anche sotto carico elevato.
3Cos'è una pipeline nel contesto della concorrenza in Go?
Cos'è una pipeline nel contesto della concorrenza in Go?
Risposta
Una pipeline è una serie di stage connessi da canali, dove ogni stage è un gruppo di goroutine che eseguono la stessa funzione. Ogni stage riceve dati tramite canali di input, esegue un'elaborazione, quindi invia i risultati tramite canali di output. Questo pattern consente di scomporre elaborazioni complesse in stage semplici e riutilizzabili, facilitando la composizione e il test di ogni componente in modo indipendente.
Come chiudere correttamente un canale in un worker pool per segnalare la fine dell'elaborazione?
Qual è la differenza tra fan-out e fan-in?
+21 domande da colloquio
Altri argomenti di colloquio Go
Fondamenti di Go
Strutture dati in Go
Interfacce in Go
Gestione degli errori
Goroutine di base
Channels
Go Modules
Server HTTP
Client HTTP
Codifica JSON
Database/SQL
Pacchetto context
Testing
Primitive di sincronizzazione
Framework web Go
Progettazione di API REST
gRPC
Reflection
Gestione della memoria
Ottimizzazione delle prestazioni
Generics
Go Design Patterns
Microservices
Sicurezza e autenticazione
Docker & Containerization
Kubernetes Basics
Go Avanzato
Sviluppo CLI
Padroneggia Go per il tuo prossimo colloquio
Accedi a tutte le domande, flashcards, test tecnici, esercizi di code review e simulatori di colloquio.
Inizia gratis