Ciao, e benvenuto nella nona puntata della sessantatreesima stagione. Nelle puntate scorse ho messo sul tavolo tanti strumenti: lucchetti e messaggi, processi e flussi di esecuzione, il lavoratore instancabile. Oggi affrontiamo la domanda che ti sarai fatto per tutta la stagione: quale scegliere? La risposta onesta è che non esiste una risposta unica, ma esiste un metodo per orientarsi. Oggi parliamo di come scegliere il modello giusto: attese o calcolo?
Partiamo dalla domanda madre, perché comanda tutto. La prima cosa da chiedersi, sempre, è quella che abbiamo imparato: il mio problema è fatto più di attese o più di calcolo? È la domanda madre, quella da cui discendono tutte le altre scelte. Perché i due mondi, come abbiamo visto, vogliono cure diverse. Sbagliare questa diagnosi iniziale ti porta a scegliere lo strumento sbagliato, e a lottare contro il tuo stesso codice. Quindi, prima di tutto, capisci in quale dei due mondi vivi.
Voglio darti la risposta per i lavori di attesa, perché è netta. Se il tuo lavoro è fatto soprattutto di attese, come un server che dialoga di continuo con la rete e con le banche dati, allora ti serve tanta concorrenza, ma non necessariamente tanto parallelismo. Qui brillano i modelli pensati per gestire moltissime attività che per lo più aspettano: il lavoratore instancabile che non si blocca mai, oppure i flussi leggerissimi a milioni. Non ti servono tanti cervelli di calcolo, perché il collo di bottiglia non è il calcolo: è l'attesa. Ti serve una struttura che, mentre una cosa aspetta, ne faccia avanzare mille altre.
Voglio darti la risposta per i lavori di calcolo, perché è opposta. Se invece il tuo lavoro è fatto soprattutto di calcolo pesante, come elaborare immagini o macinare grandi quantità di numeri, allora la concorrenza da sola non ti basta: ti serve il parallelismo vero. Vuoi dividere il calcolo tra tutti i cervelli di calcolo che hai, e farli macinare davvero insieme. Qui contano i flussi di esecuzione che sfruttano più cervelli, o i processi che si spartiscono il lavoro. E qui torna la legge della stagione scorsa a ricordarti il tetto: il guadagno dal parallelismo è limitato dalla parte del calcolo che resta in fila.
Voglio darti l'altra grande scelta, perché è ortogonale. C'è poi una seconda decisione, indipendente dalla prima: come coordinare le attività? Da una parte, la memoria condivisa con i lucchetti: veloce, diretta, ma piena di insidie e da maneggiare con disciplina, ideale quando le attività devono davvero lavorare a stretto contatto sugli stessi dati. Dall'altra, lo scambio di messaggi: più sicuro, più pulito, che elimina intere categorie di errori, ideale quando le attività possono restare indipendenti e coordinarsi solo ogni tanto. Non c'è un vincitore assoluto: c'è ciò che si adatta meglio alla forma del tuo problema.
Voglio darti l'immagine che rende chiara questa idea, perché la fissa. Pensa alla differenza tra un piccolo bar e una grande fabbrica. Nel piccolo bar, un solo barista sveglio serve tantissimi clienti: prende un ordine, avvia la macchina del caffè, e mentre quella lavora prende il prossimo ordine, incassa da un altro, e così via. È tutto attesa, e un solo lavoratore instancabile basta e avanza. Nella grande fabbrica, invece, c'è da produrre a ciclo continuo tanti pezzi pesanti: lì servono davvero molte macchine e molti operai che lavorano tutti insieme, in parallelo, perché il lavoro è di sostanza, non di attesa. Bar o fabbrica: due mondi, due scelte giuste diverse.
Voglio darti la lezione generale, perché è la più matura. La lezione è che gli strumenti non si scelgono per moda, ma per adesione al problema. Ogni tanto sentirai dire che un certo modello è il migliore, che tutti dovrebbero usarlo. Diffida sempre di queste affermazioni assolute. Il modello a lavoratore instancabile è splendido per le attese e maldestro per il calcolo puro. La memoria condivisa è velocissima e pericolosa; i messaggi sono sicuri e un po' più lenti. Ognuno è nato per un tipo di problema. Il professionista maturo non ha uno strumento preferito da usare ovunque: ha prima una diagnosi da fare, con calma, e solo dopo lo strumento giusto da tirare fuori per quel caso specifico.
Per oggi ci fermiamo qui. Abbiamo cercato di capire quale modello scegliere. La domanda madre è sempre la stessa: il problema è fatto di attese o di calcolo? Se è di attese, ti serve tanta concorrenza e pochi cervelli: il lavoratore instancabile, i flussi leggerissimi. Se è di calcolo, ti serve il parallelismo vero, più cervelli che macinano insieme, con il tetto che già conosciamo. E poi la scelta ortogonale su come coordinarsi: memoria condivisa con lucchetti, veloce ma insidiosa, oppure scambio di messaggi, sicuro ma un po' più lento. Come un piccolo bar contro una grande fabbrica: due mondi, due risposte. La lezione: si sceglie per adesione al problema, mai per moda. Nella prossima e ultima puntata: fare più cose, con giudizio. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.