|
In questo esempio vedremo come implementare un pool di worker usando goroutine e canali. |
|
![]()
|
|
|
|
|
Ecco il worker, di cui eseguiremo diverse
istanze concorrenti. Questi worker riceveranno
lavoro dal canale |
|
|
|
|
Per utilizzare il nostro pool di worker dobbiamo inviare loro del lavoro e raccogliere i risultati. Creiamo 2 canali per questo. |
|
|
Questo avvia 3 worker, inizialmente bloccati perché non ci sono ancora job. |
|
|
Qui inviamo 5 |
|
|
Infine raccogliamo tutti i risultati del lavoro. Questo assicura anche che le goroutine worker abbiano terminato. Un modo alternativo per attendere più goroutine è utilizzare un WaitGroup. |
|
|
Il nostro programma in esecuzione mostra i 5 job che vengono eseguiti da vari worker. Il programma impiega solo circa 2 secondi nonostante faccia circa 5 secondi di lavoro totale perché ci sono 3 worker che operano simultaneamente. |
|
|
Prossimo esempio: WaitGroup.