← Tutti gli episodi
Copertina di Il superpotere: la concorrenza resa semplice
Stagione 23 · Episodio 005

Il superpotere: la concorrenza resa semplice

30 agosto 2026 5:31
0:00 5:31

Ciao, e benvenuto nella quinta puntata della ventitreesima stagione. Nelle scorse puntate abbiamo capito la filosofia di semplicità di Go. Oggi arriviamo al suo vero superpotere, la capacità che più di ogni altra ne ha decretato il successo e ne ha fatto il linguaggio prediletto per i servizi in rete e l'infrastruttura moderna: la concorrenza resa semplice. Cioè il fare tante cose contemporaneamente, in modo facile e naturale, cosa che in quasi tutti gli altri linguaggi è difficile e faticosa. Oggi capiamo perché questo è così importante e come Go ci sia riuscito.

Partiamo dal problema, che riprende temi che abbiamo già incontrato. Il software moderno, specialmente quello che vive in rete, deve fare tante cose contemporaneamente. Pensa a un servizio che riceve richieste da migliaia di utenti nello stesso momento: deve gestirle tutte insieme, non una alla volta in fila, altrimenti sarebbe lentissimo. Ricordi, dalla stagione sulle basi di dati, la sfida di servire tanti utenti insieme? O il sistema operativo che fa il giocoliere con tanti processi? Fare più cose contemporaneamente è un'esigenza fondamentale del software moderno. Ma è anche, tradizionalmente, una delle cose più difficili da programmare, piena di insidie e complicazioni.

Voglio farti capire perché la concorrenza sia storicamente così difficile, perché apprezzare la difficoltà fa apprezzare la soluzione di Go. Nei linguaggi tradizionali, fare tante cose insieme richiedeva strumenti pesanti e complicati. Ogni attività parallela costava care risorse alla macchina, quindi non potevi averne troppe. Gestirle, coordinarle, era complesso e pieno di trappole sottili, di quegli errori difficilissimi da trovare di cui abbiamo parlato. Il risultato è che programmare cose concorrenti era territorio per esperti, faticoso e rischioso, qualcosa che si cercava di evitare o di limitare. La concorrenza era potente ma ostica, una di quelle cose che facevano sudare freddo i programmatori.

Ed ecco la prima grande innovazione di Go, quella che voglio farti apprezzare: rendere le attività concorrenti leggerissime ed economiche. In Go, avviare una nuova attività che gira per conto suo, in parallelo alle altre, costa pochissimo, sia in fatica di scrittura sia in risorse della macchina. Sono così leggere, queste attività, che puoi averne non decine o centinaia, ma migliaia, decine di migliaia, tutte in esecuzione insieme, senza problemi. Queste piccole attività concorrenti leggerissime hanno un nome particolare in Go, ma la cosa importante è il concetto: unità di lavoro indipendenti, economiche, che puoi creare a profusione per fare tante cose contemporaneamente. È un cambiamento di scala enorme rispetto al passato.

Voglio spiegarti come Go riesce a gestire così tante attività insieme, perché riprende un'immagine bellissima già vista. Ricordi il sistema operativo che fa il giocoliere, dando a tanti processi un pezzetto di tempo del processore a turno, così in fretta da sembrare simultanei? Go fa qualcosa di simile, ma internamente, con le sue tante attività leggere: un meccanismo dietro le quinte le fa girare tutte, distribuendole con astuzia sulle risorse disponibili, dando a ciascuna il suo turno, così che migliaia di attività procedano tutte insieme in modo efficiente. Tu, che programmi, non devi preoccuparti di questa gestione complicata: la scrivi come se ogni attività fosse una semplice sequenza di passi, e Go, sotto, si occupa di farle girare tutte in parallelo. La complessità è nascosta, la semplicità è offerta a te.

Voglio farti apprezzare quanto sia liberatorio questo, perché è il cuore del superpotere. Con Go, puoi scrivere codice concorrente, che fa tante cose insieme, quasi con la stessa facilità con cui scriveresti codice sequenziale, che fa una cosa dopo l'altra. Vuoi che questa attività proceda per conto suo mentre il resto continua? Lo dici in modo semplice, e Go se ne occupa. Quella difficoltà storica, quel sudore freddo della concorrenza, in gran parte svanisce. Fare tante cose insieme, da territorio per esperti coraggiosi, diventa qualcosa di accessibile e naturale, alla portata di ogni programmatore. Go ha preso una delle cose più difficili della programmazione e l'ha resa semplice, ed è per questo che è diventato il linguaggio dei servizi in rete.

Voglio chiarire, però, che semplice non vuol dire senza pensiero, perché sarebbe disonesto lasciartelo credere, e prepara la prossima puntata. Go rende facile avviare tante attività concorrenti, ma resta il problema di coordinarle, di farle collaborare senza pasticci, che è la parte davvero delicata della concorrenza, quella dei pericoli di cui parlavamo con le basi di dati. Go ha una risposta elegante anche a questo, un modo particolare e sicuro di far comunicare tra loro le attività concorrenti, che è forse la sua idea più bella e che merita una puntata tutta sua. Per oggi, tienti questo: Go ha reso facile avviare la concorrenza; nella prossima puntata vedremo come l'ha resa anche sicura da coordinare.

Per oggi ci fermiamo qui. Il superpotere di Go è la concorrenza resa semplice: il fare tante cose contemporaneamente, esigenza fondamentale del software in rete ma storicamente difficile e rischiosa. Go l'ha resa facile in due modi. Primo, rendendo le attività concorrenti leggerissime ed economiche, così da poterne avere migliaia insieme. Secondo, gestendole dietro le quinte con un meccanismo che le fa girare tutte in parallelo, come un giocoliere interno, nascondendoti la complessità. Così scrivere codice concorrente diventa facile quasi come scrivere codice sequenziale, ed è per questo che Go è il linguaggio dei servizi in rete. Nella prossima puntata vediamo come le fa comunicare in sicurezza: i canali. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.