Grand Central Dispatch (GCD) è una tecnologia sviluppata da Apple Inc. per ottimizzare l'esecuzione delle applicazioni su sistemi multicore o su altri sistema basati sul multiprocessing simmetrico.[1] Questa implementa un parallelismo a livello di thread seguendo il thread pool pattern. La prima versione della tecnologia è stata inclusa all'interno del OS X Snow Leopard. Il codice sorgente della libreria che implementa il servizio GCD libdispatch è stata distribuita con la licenza Apache License il 10 settembre 2009.[2]

GCD lavora consentendo al programmatore di delimitare specifiche porzioni di codice che possono essere eseguite in parallelo definendole come blocchi,[3] A tal fine estende la sintassi del linguaggio di programmazione C, C++ e Objective-C[3] Seguendo il pattern thread pool durante l'esecuzione del programma i blocchi vengono messi in una coda e vengono eseguiti appena una unità di elaborazione si rende disponibile.[3][4]
GCD per eseguire i blocchi utilizza i thread ma al programmatore la cosa è totalmente trasparente. Questo permette al programmatore di concentrarsi sullo sviluppo degli algoritmi disinteressandosi della gestione del thread e della loro sincronizzazione. La creazione dei blocchi è un'operazione semplice e veloce dato che può essere svolta con sole 15 istruzioni, mentre la creazione di un thread senza l'utilizzo di GCD richiede centinaia di istruzioni.[3]
Un blocco creato con GCD può essere utilizzato per creare un'attività da mettere in una coda d'esecuzione o può essere assegnato a una sorgente di eventi. Se un blocco è assegnato a una sorgente d'eventi quando si verifica l'evento il blocco viene attivato e messo in una coda d'esecuzione. Questa modalità di funzionamento è definita da Apple come più efficiente rispetto alla creazione di un thread che deve attendere il verificarsi di un evento.
Apple ha aggiunto la gestione delle espressioni lambda al C, C++ e Objective-C al fine di semplificare lo sviluppo di blocchi per GCD.
Caratteristiche
[modifica | modifica wikitesto]Il framework dispatch definisce diversi tipi di dati e funzioni per manipolarli:
- Le Dispatch Queues sono delle code che contengono dei blocchi di codice o delle funzioni che vengono eseguite. La libreria automaticamente crea diverse code con diversi livelli di priorità ed esegue diversi task concorrenti selezionando il numero ottimale di task da eseguire a seconda delle condizioni operative del momento. Un utilizzatore della libreria può creare quante code seriali vuole, in una coda seriale i task vengono eseguiti in modo seriale e quindi l'esecuzione di un blocco è critico per l'esecuzione di ogni altro blocco della coda e quindi le code seriali possono essere utilizzate per gestire risorse condivise al posto di altre strutture come i lock.
- Le Dispatch Sources sono degli oggetti sui quali possono essere registrati dei blocchi di codice che verranno eseguiti nel caso si scateni un evento come la creazione di un file o l'attivazione di un evento POSIX.
- I Dispatch Groups sono degli oggetti che raggruppano più blocchi. I blocchi sono aggiunti al gruppo e l'utilizzatore può utilizzare i dati elaborati quando tutti i blocchi sono stati eseguiti.
- I Dispatch Semaphores sono degli oggetti che permettono all'utilizzatore della libreria di limitare l'esecuzione parallela solo ad alcuni blocchi.
Note
[modifica | modifica wikitesto]- ^ Apple Previews Mac OS X Snow Leopard to Developers Archiviato il 18 marzo 2012 in Internet Archive., 9 giugno 2008.
- ^ Apple rilascia Grand Central Dispatch come Open Source, su theapplelounge.com, The Apple Lounge, 11-09-2009. URL consultato l'11-09-2009.
- ^ a b c d Apple Technical Brief on Grand Central Dispatch Archiviato il 12 giugno 2009 in Internet Archive., 9 giugno 2009.
- ^ WWDC 2008: New in Mac OS X Snow Leopard Archiviato il 17 ottobre 2008 in Internet Archive. (accessed 2008-06-18)
Collegamenti esterni
[modifica | modifica wikitesto]- Sito ufficiale, su libdispatch.macosforge.org.