Apple opensourcoval Grand Central Dispatch

Apple opensourcoval Grand Central Dispatch

Přestože se jedná o unikátní, klíčovou marketingovou funkci Snow Leopardu, Apple se rozhodl otevřít kód Grand Centra Dispatch pod liberální licencí Apache 2.0.

Grand Central Dispatch nového Snow Leoparda je systémový mechanismus pro spravování paralelních úloh přes více procesorových jader určených pro vývojáři (kteří tak nemusí řešit tento problém sami), zahrnuje několik komponent v operačním systému.

Implementaci Grand Central Dispatch obsahuje API, nazvané libdispatch a byla uvolněna jako open source projekt, který se připojuje k dalším komponentům, které Apple již označil za otevřené, včetně kernelových komponent Darwin OS XNU kernelu a částí které patří pod LLVM projekt.

Vzdání se části kódu, které Apple provedl je pro mnohé překvapením, protože nové funkce Snow Leoparda byly vnímány jako konkurenční výhoda ve světě s mutlicore technologiemi.

Nicméně otevřením kódu široké veřejnosti může napomoci při jeho adopci. Až do dnes, bylo velmi nepravděpodobné že by nějaký nový UNIXový nástroj byl vyvíjen pod Mac OS X za pomoci Grand Central, protože by pak pracoval pouze na Macovi. S možností že by se Grand Central stal dostupným pro další UNIXové systémy se značně zvyšuje možnost, že začne být využíván v příkazech terminálu.

McCormack z MacResearch tvrdí, že zde je malé riziko u sdílení kódu Apple, tvrdí že "Grand Central může být použit přímým konkurentem Apple, jako například Microsoftem," a poznamenává, že adopce jinými Unixovými a Linuxovými systémy nemůže "být skutečnou hrozbou pro běžné uživatele."

Apple přispívá a spravuje mnoho open source projetků, od WebKitu až po CUPS. Některé jeho úsilí v open source byly velmi úspěšné, některé se nesetkali s přílišným nadšením. Například zde nebyl velký zájem o launchd v open source komunitě mimo Mac O SX, hlavním důvodem byl požadavek na masivné přestavění Linuxu aby jej bylo možné použít.

Open source podpora pro kód Apple byla vždy smíšená. Darwin Streaming Server, Applovský RTSP streaming projekt distribuovaný v Mac OS X Serveru jako QuickTime Streaming server byl využíván jen velmi omezeně. Webkit byl velmi úspěšný, hlavně u mobilních zařízení. Bonjour byl implementován pro Linux a nabral nové směry.

Výrazný zájem o Grand Central Dispatch může vést k širší podpoře základů pro paralelismus kompatibilní s dalšími otevřenými technologiemi Apple, jako je OpenCL. Dostupnost GCD na Linuxu an dalších Unixových systémech může také generovat poptávku po nástrojích v příkazovém řádku, které začnou využívat jeho sílu. To by mělo pomoci Apple posílit technologie na trhu, kde mají minoritu, jako enterprise trh a supercomputing.

A proč by se měli vývojáři zabývat Grand Central Dispatch, když tady mají dlouhou dobu vlákna? Na to odpovídá referenční příručka z vývojářské dokumentace Apple:

Ačkoliv thready(vlákna) zde jsou již několik let a jejich použití stále pokračuje, neřeší základní problém spouštění několika úloh škálovatelnou cestou. S vlákny břemeno vytváření škálovatelného řešení leží pouze na bedrech vývojářů. Ten musí rozhodnout kolik threadů je potřeba a přizpůsobit jejich počet dynamicky podmínkám počítače. Dalším problémem je, že aplikace nese většinu nákladu asociovanou s vytvářením a udržováním jakéhokoliv vlákna, které použije.

Místo aby se spoléhal na vlákna, Mac OS X a iPhone OS využívají asynchronní přístup k řešení problému souběžnosti. Asynchronní funkce zde byly v operačním systému řadu let a často jsou používány pro úlohy, které mohou trvat velmi dlouho, jako například čtení dat z disku. Při zavolání, asynchronní funkce provede část práce za scénou aby mohla začít fungovat, ale pak se vrátí aby mohla být původní úloha dokončena. Typicky, tato práce zahrnuje vlákno na pozadí, které spuští požadovanou úlohu ve vláknu, pak posílá oznámí volajícímu (většinou přes callback funkci) když je úloha dokončena. V minulosti, pokud jste potřebovali asynchronní funkci, která dosud neexistovala, jste musil  vytvořit vlastní asynchronní funkci a vytvořit vlastní vlákno. Ale nyní Mac OS X a iPhone OS obsahuje technologie, které dovolují provádět jakoukoliv úlohu asynchronně, bez nutnost spravovat vlastní vlákno.

Jednou z technologií, jak nastartovat asynchronní úlohu v Mac OS X je Grand Central Dispatch (GCD). Tato technologie vezme kód na správu vláken, který by musel být ve vaší aplikací a přesune jej dolů na systémovou úroveň. Vše co je pak třeba vytvořit je spustit a přidat jej do příslušné fronty (dispatch queue). GCD se postará o vytvoření nebytných vláken a rozvrh úloh které se mají spustit na těchto vláknech. Protože správa vláken je nyní částí služeb operačního systému, GCD poskytuje holistický přístup pro správu vláken a spouštění, poskytuje vyšší efektivitu než u tradičních vláken.

Další technologií dostupné v Mac OS X a iPhone OS jsou operační fronty. Operační fronty jsou Objective-C objekty, které pracují velmi podobně jako dispatch queue. Můžete definovat úlohy, které chcete spustit a můžete je přidat do operační fronty, která spravuje spouštění a rozvrh jednotlivých úloh. Stejně jako GCD, operační fronty spravují všechny vlákna za vývojáře, zajišťují tak že úlohy jsou spouštěné tak rychle a efektivně jak je to pro systém možné.

Z dokumentace je zřejmé, že GCD neruší systém vláken, jak by se to někomu mohlo zdát, ale spíše jim dává nový management. Díky tomu se redukuje kód aplikací (vývojáří nemusí řešit management, který nemuseli řešit optimálně) a díky centrálnímu řešení bude mít systém vždy více informací k rozhodnutí o nejrychlejší cestě k vyřešení úlohy a ve výsledku budou spolu aplikace lépe spolupracovat (Základní poučka informatiky, že jeden procesor může řešit pouze jednu úlohu, stejně jako 2 procesory/jádra mohou řešit pouze 2 úlohy stále platí). Díky systému front se tak aplikace nemusí přetahovat o procesor což v důsledku znamená rychlejší provedení úlohy pro obě aplikace.

Poslat Apple opensourcoval Grand Central Dispatch na facebook
Publikováno 14.9.2009
 

Změna barev | Autorská práva | Kontakt | Podpora | RSS kanály
© 2006 Gandalf, Design by Mirek
Creative Commons License