Go

Pattern di concorrenza

Worker pool, pipeline, fan-out/fan-in, cancellation, context, errgroup, semafori

24 domande da colloquio·
Mid-Level
1

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.

2

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.

3

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.

4

Come chiudere correttamente un canale in un worker pool per segnalare la fine dell'elaborazione?

5

Qual è la differenza tra fan-out e fan-in?

+21 domande da colloquio

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