← Tutti gli episodi
Copertina di Parlarsi senza pasticci: i canali e la comunicazione
Stagione 23 · Episodio 006

Parlarsi senza pasticci: i canali e la comunicazione

30 agosto 2026 5:37
0:00 5:37

Ciao, e benvenuto nella sesta puntata della ventitreesima stagione. Nella scorsa puntata abbiamo visto come Go renda facile avviare tante attività concorrenti. Ma ho lasciato in sospeso la parte più delicata: come farle collaborare senza pasticci. Oggi affrontiamo questo, e scopriamo quella che è forse l'idea più bella ed elegante di tutto Go, una filosofia sulla concorrenza che risolve alla radice i suoi pericoli più insidiosi. Riguarda il modo in cui le attività concorrenti si scambiano informazioni: i canali. E c'è, dietro, una massima che vale la pena incidere nella mente.

Ripartiamo dal problema, che riprende la stagione sulle basi di dati. Ricordi i pericoli di tante cose che accadono insieme e toccano gli stessi dati? Due attività che modificano la stessa cosa nello stesso momento, pestandosi i piedi, corrompendo i dati, con quegli errori sottili e imprevedibili difficilissimi da trovare. Questo è il vero cuore della difficoltà della concorrenza: non tanto far girare tante cose insieme, quanto coordinarle in modo che, quando devono condividere qualcosa, non facciano disastri. La domanda cruciale è: come fanno le attività concorrenti a scambiarsi dati in modo sicuro, senza pestarsi i piedi?

Il modo tradizionale di affrontare questo problema, e voglio spiegartelo perché è ciò che Go rifiuta, è la memoria condivisa. Le varie attività condividono uno stesso spazio di dati, a cui accedono tutte, e per evitare che si pestino i piedi si mettono dei lucchetti: quando un'attività vuole toccare il dato condiviso, lo blocca, lo usa, e poi lo sblocca, così le altre aspettano il loro turno. Funziona, ma è complicato e pieno di trappole: dimenticare un lucchetto, metterli nell'ordine sbagliato, creare situazioni in cui due attività si bloccano a vicenda per sempre. La memoria condivisa con i lucchetti è la fonte di gran parte del dolore della concorrenza. È potente, ma delicatissima da maneggiare.

Go propone una filosofia radicalmente diversa, e questa è la sua idea geniale, che voglio farti afferrare bene. Invece di far condividere alle attività uno stesso spazio di dati su cui litigare con i lucchetti, Go dice: fate in modo che le attività si passino i dati l'una all'altra, come messaggi, invece di condividerli. Immagina che, invece di avere una lavagna comune su cui tutti scrivono e cancellano rischiando di pestarsi, le attività si passino dei bigliettini l'una all'altra, in modo ordinato. Chi ha il bigliettino ha il dato, lo usa, e poi eventualmente lo passa a un'altra. Non c'è condivisione simultanea da coordinare con i lucchetti: c'è un passaggio ordinato di informazioni da un'attività all'altra. È un modo completamente diverso di pensare alla coordinazione.

Lo strumento con cui Go realizza questo passaggio di messaggi si chiama canale, e voglio spiegartelo con un'immagine. Un canale è come un tubo, una conduttura, che collega due attività concorrenti: da un'estremità un'attività può inserire un dato, e dall'altra un'altra attività lo riceve. È un modo sicuro per passare informazioni da un'attività all'altra, uno alla volta, in modo ordinato e coordinato. Quando un'attività manda un dato nel canale, e un'altra lo riceve, il passaggio avviene in modo pulito, senza che le due si pestino i piedi, perché il canale gestisce la sincronizzazione per loro. Le attività comunicano attraverso questi canali, passandosi i dati, invece di contendersi una memoria comune. Il canale è la conduttura sicura della comunicazione tra attività concorrenti.

C'è una massima famosa, tra i programmatori Go, che riassume magnificamente questa filosofia, e voglio dartela perché è illuminante: non comunicare condividendo la memoria; piuttosto, condividi la memoria comunicando. Detta così è un po' criptica, ma il senso è profondo. Il modo tradizionale era comunicare condividendo: mettere i dati in uno spazio comune e coordinarsi con i lucchetti. Il modo di Go è l'opposto: condividere comunicando, cioè passarsi i dati attraverso i canali, come messaggi. La differenza è enorme: invece di litigare su una risorsa comune, ci si passa ordinatamente le cose. È un capovolgimento che rende la coordinazione tra attività molto più semplice e sicura, perché elimina alla radice il conflitto sulla risorsa condivisa.

Voglio farti apprezzare perché questo modo sia più sicuro e più chiaro, perché è il punto. Quando le attività comunicano passandosi dati attraverso i canali, il flusso delle informazioni è esplicito e ordinato: vedi chiaramente chi manda cosa a chi, e i dati passano in modo pulito da un'attività all'altra, senza sovrapposizioni pericolose. Non ci sono lucchetti da gestire, non ci sono conflitti sottili sulla memoria comune, non ci sono quegli errori subdoli che nascono dalla condivisione simultanea. Il modello a canali rende la concorrenza non solo più sicura, ma anche più facile da capire, perché il coordinamento diventa un flusso visibile di messaggi invece di un intrico invisibile di accessi condivisi. È un modo più umano di pensare alla collaborazione tra attività.

Per oggi ci fermiamo qui. La parte davvero delicata della concorrenza non è far girare tante cose insieme, ma coordinarle quando devono condividere qualcosa. Il modo tradizionale, la memoria condivisa con i lucchetti, è potente ma pieno di trappole. Go propone una filosofia diversa ed elegante: invece di condividere una memoria comune su cui litigare, far comunicare le attività passandosi i dati come messaggi, attraverso i canali, delle condutture sicure che collegano le attività. La massima è: condividi la memoria comunicando, non il contrario. Così la coordinazione diventa un flusso ordinato e visibile di messaggi, più sicuro e più chiaro. Nella prossima puntata vediamo come Go struttura il codice: comporre invece di ereditare, le interfacce. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.