Su Grand Central? In pratica è una tecnologia sviluppata da Apple per poter creare applicazioni che sfruttano il più possibile i processori multi-core. Detto in altre parole, consente agli sviluppatori di sfruttare al meglio le potenzialità offerte dai nuovi processori Intel. Grand Central non è altro che un insieme di funzioni che consentono di distribuire l'esecuzione di un blocco codice su diversi core, in modo da fare, per esempio, 4 moltiplicazioni contemporaneamente se il processore è quad-core.
Il fatto è che esistono già tecnologie simili, OpenMP è una di queste. Nativamente in ambienti Unix esistono API di sistema (funzioni già implementate e supportate dal kernel) che consentono di lavorare in multi threading. E' il sistema operativo che si occupa della gestione dei thread e dei core fisici. Il fatto è che ogni "tecnologia" ha i suoi pregi e i suoi difetti, o è più avanzata di altre.
Le mie conoscenze si fermano al fatto che mi capita di usare classi Cocoa pensate per il multithreading o di aver usato in passato il multi threading di windows e quello di Unix. Il fatto è che Grand Central è pensato proprio per i multi-core. Quindi ha un occhio di riguardo non solo al multi threading (che consiste nell'esecuzione di più thread su uno o più core), ma proprio alla gestione ottimale di più core.
Spero che ci sia qualcuno in grado di dirti di più e in modo più dettagliato, io non ho le basi teoriche per la trattazione approfondita di multithreading e calcolo parallelo.
Posso dirti che il multithreading esiste da un sacco di tempo su windows e su linux. Un thread non è altro che un processo figlio di un processo padre. Pensa ad esempio ad iTunes. Hai un thread che gestisce l'interfaccia grafica e mentre accedi all'Apple Store il thread dell'interfaccia tiene viva l'interazione tra te e iTunes, mentre il thread che gestisce la connessione all'Apple Store fa quello che deve fare. Quando termina, il thread dell'interfaccia, per esempio, ferma l'animazione della barra di caricamento. Oppure mentre masterizzi, hai sempre il thread dell'interfaccia (quello c'è sempre su OS X), il thread che masterizza, il thread che monitora la masterizzazione.
Pensa ora di avere un processore con 1 core. Tutto questo viene gestito da un core, appunto, un'operazione alla volta. Hai una timeline, e ogni istante viene dedicato ad un processo con una proporzione di tempo. Il thread d'interfaccia può avere, ad esempio, 10 nanosecondi, poi tocca al thread di masterizzazione, poi al thread dell'interfaccia e poi al thread di monitoraggio della masterizzazione (sto facendo un esempio a caso). Tutto questo avviene sequenzialmente perché hai un core, ma avviene in modo parallelo perché da un punto di vista macroscopico porti avanti 3 thread contemporaneamente (anche se nell'infinitesimo di tempo ne porti avanti 1 alla volta).
Con il multi core invece è diverso, perché puoi, ad esempio, far sì che negli stessi 10 nanosecondi il core 1 gestisce il thread d'interfaccia, il core 2 il thread di masterizzazione e il core 3 il thread di monitoraggio della masterizzazione. E qui, a meno di un discorso di "imbuto" per quanto riguarda il trasferimento dati da CPU a RAM e a tutto il resto, ottieni una parallelizzazione quasi perfetta, perché i dati vengono processati contemporaneamente.
In modo mooolto approssimativo le cose dovrebbero funzionare così.. capisci però che ci sono di mezzo tanti fattori per quanto riguarda l'ottimizzazione di elaborazione e quindi le prestazioni. Ci sono i chip hardware (i controller) che si occupano a livello più basso di gestire il tutto e poi arrivi all'astrazione software massima che opera a livello di sistema operativo, ed è quella che decide quale thread assegnare a quale core, e quanto tempo di elaborazione assegnarli (per non parlare poi del discorso della ram e degli accessi a ram, che avvengono - credo - in modo seriale e sono quindi più complicati). Ecco, GCD interviene proprio qui, ed è qui che OS X può intervenire per ottimizzare le prestazioni.
Nella programmazione multi threading infatti ci sono un sacco di problemi che si formano per via naturale dalla scelta di voler parallelizzare un qualcosa che di per se è seriale.
Mi spiego meglio: capita anche nella vita reale di essere in più persone a voler usare lo stesso telefono per fare una telefonata; e come si fa? Bisogna decidere chi chiama per primo e per quanto tempo. Lo stesso capita qui, ma in modo ancora più complicato. Parliamo di risorse che vengono utilizzate per un tot da n thread differenti, i quali sono regolati da dei semafori o addirittura da dei thread di monitor (vedi ad esempio il thread di monitoraggio della masterizzazione). Semafori e thread di monitor rappresentano l'implementazione del concetto di Mutex (Mutex - Wikipedia ).
Capisci che quel di cui si ha bisogno è un'astrazione software che renda efficiente al massimo e più semplice possibile la programmazione multi threading.
Quando si parla di windows vs mac vs linux spesso si scade nella banalità. Io credo che uno dei punti da tenere in considerazione sia proprio questo del multithreading, perché meglio è implementata la tecnologia che supporta la parallelizzazione, più potenti saranno i programmi di elaborazione (nel 3D, in applicazioni scientifiche, in applicazioni grafiche, nella videoludica, nella compressione, etc..).
Ogni sistema operativo moderno (Windows, Linux, OS X, BSD e altri) supportano il multithreading. GCD è una delle tante soluzioni alla gestione multi threading applicata al multi core. E sembra essere buona.
Aggiungo ancora due righe: in Snow Leopard è stata introdotta anche OpenCL. Che cos'è? In pratica è un insieme di API (esattamente come GDC) che consentono di passare al processore grafico della scheda video istruzioni riguardo l'elaborazione di semplici operazioni. I processori grafici hanno set di istruzioni elementari differenti da quelli delle CPU e generalmente non hanno le capacità di fare tutte le operazioni che le CPU fanno. Quindi con OpenCL non fai tutti i tipi di calcoli.
Resta il fatto che la potenza di una GPU (Graphic Processing Unit - processore grafico) con VRAM annessa (Video RAM) è notevolmente superiore a quella di una CPU, perché una scheda video è una sorta di mini-computer. Quindi far lavorare la scheda video per dei calcoli mentre lavora anche la CPU è un modo per raddoppiare (a spanne) la potenza di calcolo e dimezzare i tempi di esecuzione.
Quindi: OpenCL + GDC sono due tecnologie nuove proiettate verso la parallelizzazione e lo sfruttamento ottimale delle risorse hardware.
E' questo a cui mi riferisco quando parlo di "software" che fa la differenza e non di hardware. Le potenzialità di una CPU intel su di un Mac sono le stesse su di un PC. Però se il sistema operativo che gira non è in grado di sfruttare al meglio tali potenzialità, allora ottieni prestazioni e risultati insoddisfacenti per l'hardware che hai.
A questo si aggiunge il fatto che OS X è Unix-based (ovvero ha un cuore Unix) e quindi è stabile e leggero.
PS: se ritenete che ho detto stupidate correggetemi, son cose non semplici e io sono un profano..
PPS: dada, non si può sapere fino a dove una tecnologia si spinge se non c'è qualcuno in grado di sfruttarla al meglio. Su windows il multithreading lavora diversamente rispetto a OS X, e i pregi e i diffeti ci sono per entrambi. Il fatto è che su windows esiste una contro parte di GCD, la Parallel Extensions (http://en.wikipedia.org/wiki/Task_Parallel_Library#TPL ).