Programmazione Concorrente

19 Set

Alcuni anni fa, correva l’anno 2007, durante il TechEd avevo assistito a questa illuminante sessione dal titolo ”Irresistible Forces Meet the Movable Objects”. Il messaggio di Pat Helland sullo sviluppo software nel medio e lungo termine era molto chiaro: la frequenza dei clock ha raggiunto il limite e l’evoluzione va verso le CPU multi-core quindi la programmazione concorrente ed i relativi pattern devono diventare una delle conoscenze indispensabili per ogni programmatore professionista.

Oggi sono passati alcuni anni da quella lungimirante sessione e di questo topic se ne parla sempre di più. Basti pensare a quale sia l’hype per node.js ovvero un web-server che si programma in javascript dove tutto il codice non è bloccante: il risultato è una estrema scalabilità rispetto ad altri web-server “tradizionali”

Per quanto riguarda i diversi framework per lo sviluppo applicativo , sia web sia desktop, tutti di questi tempi hanno investito molti sforzi per agevolare la programmazione concorrente. Per esempio in un Ruby è stato introdotto Event machine mentre per il .NET framework, che fin dalla versione 1 supporta questo tipo di programmazione, sono stati introdotti la Task Parallel Library e Reactive Extensions

Insomma ogni piattaforma ha introdotto e/o sta introducendo funzionalità che hanno l’obiettivo di rendere semplice la creazione di applicazioni che sfruttano al 100% tutti i core presenti sui personal computer odierni e futuri. Già l’obiettivo è rendere semplice un compito che negli anni passati non era certo un argomento entry-level. La ragione fondamentale a mio avviso era la mancanza di conoscenze chiare in materia ma fortunatamente oggi la conoscenza in materia si è evoluta e perlomeno sono chiare una serie di problematiche comuni a tutti i linguaggi quando si parla di programmazione concorrente.

Patterns of parallel programming

Per chi vuole capire completamente cosa significa la programmazione concorrente (o multi-thread) il primo punto è capire quali sono gli schemi/scenari (ovvero i pattern) che si incontrano in questo mondo.

Al di la del tettaglio tecnologico questo documento di ben oltre 100 pagine dedicate all’attuale versione del .NET Framework è una buona lettura per chi vuole capire quali sono i pattern e gli anti-pattern da utilizzare o meno per creare software multi-thread di qualità.

Fonte: Patterns of parallel programming – Understanding and applying parallel patterns with the .net framework 4 and Visual C#

Parallel programming “for real”

Visto che nei prossimi mesi passerò la maggior parte delle mie giornate lavorative sviluppando un sistema che eroga informazioni in “real-time”, quindi fa largo uso della programmazione multi-thread, vorrei cercare di riassumere con alcuni post quelli che sono i problemi reali che si incontrano facendo un utilizzo quotidiano della programmazione concorrente.

Lascia un commento