Una delle novità dell'imminente nuova versione del .NET Framework a cui personalmente ho dato parecchia importanza è il notevole supporto per multithreading e parallel computing. Spesso siamo abituati a confondere questi due termini e a usarli quasi come sinonimi, anche se sinonimi veri e propri non sono. Il multithreading è un qualcosa che è sui nostri desktop già da diversi anni, supportato dal Framework sin dalle sue prime incarnazioni. Il calcolo parallelo è invece qualcosa di più, che sfrutta il multithreading per massimizzare l'uso dei core messi a disposizione dall'hardware, un aspetto fondamentale nel momento in cui anche sui laptop non è raro imbattersi in 4, 6 o 8 core.
Ho avuto modo di occuparmi di questi aspetti durante la stesura di uno dei capitoli dei nostri libri di prossima uscita interamente dedicato alle tematiche di multithreading e parallel computer, e penso francamente che il .NET Framework 4.0, il nuovo CLR e Visual Studio 2010 portino l'esperienza di sviluppo di applicazioni parallele a livelli assolutamente ineguagliati al giorno d'oggi.
Ma quali sono sostanzialmente queste novità? Beh. innanzitutto direi la presenza di PLINQ e della classe ParallelQuery, grazie alla quale è possibile integrare con grandissima facilità il calcolo parallelo all'interno delle nostre query LINQ; basta usare infatti l'extension method AsParallel() per far sì che una query del tipo
var query = from i in list.AsParallel() where someCondition(i) select someResult(i)
venga eseguita sfruttando al massimo i core presenti nel sistema.
Per il codice "di tutti i giorni", invece, sono state introdotte le classi Task e TaskFactory, che rendono possibile creare task asincroni, gestirne le notifiche, accodarne di altri, ecc.. in una sintassi estremamente concisa e intuitiva, che ci risparmia un bel po' di lavoro manuale che eravamo costretti a svolgere usando il ThreadPool.
Ma più thread contemporaneamente in esecuzione vuol dire anche gestire problematiche di concorrenza e di thread safety. Chi ha lavorato in quest'ambito in passato, sa che ad esempio avere a che fare con collection condivise tra più thread non era assolutamente banale. Il .NET Framework 4.0 espone un nuovo namespace, dal nome fin troppo indicativo: System.Collections.Concurrent. Esso contiene un gran numero di collection, tutte rigorosamente thread safe, che risparmiano parecchie grane quando utilizzate in scenari paralleli e i cui internals (basta dare un'occhiata con Reflector) sono tutt'altro che banali e scontati, con lo scopo di minimizzare i lock, che notoriamente vanno a braccetto con decadimenti prestazionali.
E la ciliegina su questa torta non poteva che essere lui, Visual Studio 2010, e il suo supporto al debug di applicazioni multithreaded. Provate a dare un'occhiata a queste due immagini in basso per capire di cosa sto parlando, valgono più di mille parole:
Che dire. ci aspettano non solo mesi di articoli e succose novità, ma anche mesi in cui potremo sfruttare strumenti innovativi, in grado di darci una grande mano nel lavoro di tutti i giorni e, perché no, anche vantaggi sostanziali nelle potenzialità delle nostre applicazioni!
Ci vediamo su queste pagine!
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Azure Mobile Services a Milano, il 7 gennaio 2013 alle 14:25
- Windows 8 su MacBook Pro, la mia esperienza, il 20 agosto 2012 alle 08:26
- Un libro davvero bello su Visual Studio LightSwitch, il 28 marzo 2012 alle 19:48
- I miei Community Days 2012..., il 20 febbraio 2012 alle 09:00
- PhoneGap e Titanium, esiste davvero il write once run anywhere su mobile?, il 12 gennaio 2012 alle 09:30
- ASPItalia ti premia con Visual Studio 2010 Ultimate + MSDN Subscription!, l'1 settembre 2010 alle 11:52