Grand Central Dispatch

Da Wikipedia, l'enciclopedia libera.

Grand Central Dispatch (GCD) è una tecnologia sviluppata da Apple Inc. per ottimizzare l'esecuzione delle applicazioni su sistemi multi core 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 Mac OS X 10.6. Il codice sorgente della libreria che implementa il servizio GCD libdispatch è stata distribuita con la licenza Apache License il 10 settembre 2009.[2]

Funzionamento del thread pool pattern.

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 concentrasi 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 sorgente]

Il framework dispatch definisce diversi tipi di dati e funzione per manipolare essi.

  • Le Dispatch Queues sono delle code che contengono dei blocchi di codice o delle funzione 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 secondo 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 sorgente]