ProActive - ProActive
![]() | tento článek potřebuje další citace pro ověření.Listopad 2010) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Vývojáři | ActiveEon, Inria, Konsorcium OW2 |
---|---|
Stabilní uvolnění | 10.0 (F-Zero) / 12. července 2019 |
Napsáno | Jáva |
Operační systém | Cross-platform |
Typ | Plánovač úloh |
Licence | AGPL |
webová stránka | www |
ProActive Parallel Suite je open-source software pro podniky pracovní zátěž orchestrace, součást OW2 společenství. A Pracovní postup model umožňuje definovat soubor spustitelné soubory a skripty napsané v libovolném skriptovací jazyk spolu s jejich závislostmi, takže ProActive Parallel Suite může plán a organizovat popravy při optimalizaci využití výpočetní zdroje.
ProActive Parallel Suite je založen na „aktivní objekt "-na základě Rámec Java optimalizovat rozdělení úkolů a odolnost proti chybám.
Klíčové vlastnosti sady ProActive Parallel Suite
- Pracovní postupy usnadňují paralelizaci úkolů (Java, skripty nebo nativní spustitelné soubory) a spouštějí je na zdrojích odpovídajících různým omezením (jako je akcelerace GPU, knihovna nebo lokalita dat).
- Poskytují se webová rozhraní pro návrh a provádění pracovních toků úloh a správu výpočetních prostředků. Rozhraní RESTful API poskytuje interoperabilitu s podnikovými aplikacemi.
- Výpočtové prostředky lze federovat (cloud, clustery, virtualizované infrastruktury, stolní počítače) do jedné virtuální infrastruktury. Poskytuje automatické škálování a usnadnit strategie řízení zdrojů.
- Interoperabilita je zajištěna heterogenními pracovními toky, kde lze úkoly spouštět na různých platformách, včetně Windows, Mac a Linux.
ProActive Java framework a programovací model
Model vytvořil Denis Caromel, profesor na University of Nice Sophia Antipolis.[1] Několik rozšíření modelu bylo později provedeno členy týmu OASIS v INRIA.[2]Kniha Teorie distribuovaných objektů představuje kalkul ASP, který formalizuje funkce ProActive a poskytuje formální sémantika k počtu spolu s vlastnostmi provádění programu ProActive.[3]
Aktivní objekty
Aktivní objekty jsou základní jednotky činnosti a distribuce používané pro stavbu souběžně aplikace využívající ProActive. Aktivní objekt běží se svým vlastním vlákno. Toto vlákno provádí pouze metody vyvolané na tomto aktivním objektu jinými aktivními objekty a metody pasivních objektů subsystému, které patří tomuto aktivnímu objektu. U ProActive nemusí programátor na rozdíl od standardní Javy explicitně manipulovat s objekty Thread.
Aktivní objekty lze vytvořit na kterémkoli z hostitelů zapojených do výpočtu. Jakmile je aktivní objekt vytvořen, jeho aktivita (skutečnost, že běží s vlastním vláknem) a jeho umístění (místní nebo vzdálené) jsou dokonale transparentní. S jakýmkoli aktivním objektem lze manipulovat, jako by šlo o pasivní instanci stejné třídy.
An aktivní objekt se skládá ze dvou objektů: a těloa standardní objekt Java. Tělo není viditelné zvenčí aktivního objektu.
Subjekt je odpovědný za příjem hovorů (nebo žádosti) na aktivním objektu a jejich uložení do fronty čekajících hovorů. Provádí tato volání v pořadí určeném zásadami synchronizace. Pokud není zadána zásada synchronizace, jsou hovory spravovány v „První dovnitř, první ven "(FIFO) způsobem.
Vlákno aktivního objektu poté zvolí metodu ve frontě nevyřízených požadavků a provede ji. Uvnitř aktivního objektu není poskytován žádný paralelismus; toto je důležité rozhodnutí v designu ProActive, umožňující použití podmínek „pre-post“ a třídní invarianty.
Na straně subsystému, který odesílá volání aktivnímu objektu, je aktivní objekt reprezentován a proxy. Proxy generuje budoucí objekty pro reprezentaci budoucích hodnot, transformuje volání na objekty požadavku (z hlediska metaobjektu se jedná o reifikace ) a vystupuje hluboké kopie pasivních objektů předaných jako parametry.
Aktivní objektový základ
ProActive je knihovna určená pro vývoj aplikací v modelu zavedeném Eiffel //, paralelním rozšířením Eiffelovský programovací jazyk.
V tomto modelu je aplikace strukturována v subsystémy. Pro každý subsystém existuje jeden aktivní objekt (a tedy jedno vlákno) a pro každý aktivní objekt (nebo vlákno) jeden podsystém. Každý subsystém se tedy skládá z jednoho aktivního objektu a libovolného počtu pasivních objektů - možná žádných pasivních objektů. Vlákno jednoho subsystému provádí metody pouze v objektech tohoto subsystému. Mezi subsystémy neexistují žádné „sdílené pasivní objekty“.
![](http://upload.wikimedia.org/wikipedia/en/thumb/0/0a/ActiveObjectMethodCall.png/220px-ActiveObjectMethodCall.png)
Tyto funkce ovlivňují topologii aplikace. Ze všech objektů, které tvoří subsystém - aktivní objekt a pasivní objekty - je objektům mimo subsystém znám pouze aktivní objekt. Všechny objekty, aktivní i pasivní, mohou mít odkazy na aktivní objekty. Pokud objekt o1 má odkaz na pasivní objekt o2, pak o1 a o2 jsou součástí stejného subsystému.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/Sequential_2_Distributed.png/220px-Sequential_2_Distributed.png)
To má také důsledky na sémantiku předávání zpráv mezi subsystémy. Když objekt v subsystému volá metodu na aktivním objektu, parametry volání mohou být odkazy na pasivní objekty subsystému, což by vedlo ke sdíleným pasivním objektům. Z tohoto důvodu jsou vždy předávány pasivní objekty předávané jako parametry volání aktivních objektů hluboké kopírování. Aktivní objekty jsou naproti tomu vždy předány odkaz. Symetricky to platí i pro objekty vrácené z metod volaných na aktivní objekty.
Díky konceptům asynchronní volání, futures a žádné sdílení dat, aplikace napsaná pomocí ProActive nepotřebuje žádné strukturální změny - ve skutečnosti téměř žádnou - bez ohledu na to, zda běží postupně, vícevláknové nebo distribuováno životní prostředí.
Asynchronní hovory a futures
Kdykoli je to možné, volání metody na aktivním objektu je reified jako asynchronní požadavek. Pokud to není možné, je hovor synchronní a bloky dokud nedostanete odpověď. Pokud je požadavek asynchronní, okamžitě vrátí a budoucí objekt.
![](http://upload.wikimedia.org/wikipedia/en/thumb/8/8f/FutureObject.png/220px-FutureObject.png)
Budoucí objekt funguje jako zástupný symbol pro výsledek vyvolání dosud neprovedené metody. V důsledku toho může volající vlákno pokračovat v provádění svého kódu, pokud nepotřebuje vyvolat metody na vráceném objektu. Pokud nastane potřeba, volající vlákno se automaticky zablokuje, pokud ještě není k dispozici výsledek vyvolání metody. Ačkoli budoucí objekt má strukturu podobnou struktuře aktivního objektu, budoucí objekt není aktivní. Má pouze Stub a Proxy.
Příklad kódu
Výňatek kódu níže zdůrazňuje pojem budoucích objektů. Předpokládejme, že uživatel volá metodu foo
a metoda bar
z aktivního objektu A
; the foo
metoda vrací neplatnost a bar
metoda vrací objekt třídy PROTI
:
// jednosměrná typizovaná asynchronní komunikace směrem k (dálkovému) AO a// žádost je odeslána na aA.foo (param);// typovaná asynchronní komunikace s výsledkem.// v je první očekávaná budoucnost, po které bude transparentně naplněna// služba požadavku a odpověďPROTI proti = A.bar (param);...// použití výsledku asynchronního volání.// pokud v je stále očekávaná budoucnost, spustí automatiku// počkat: Čekejte podle potřebyproti.bože (param);
Když foo
je volána na aktivním objektu A
, vrátí se okamžitě (protože aktuální vlákno nemůže provádět metody v jiném subsystému). Podobně, když bar
je povolán A
, vrátí se okamžitě, ale výsledek proti
zatím nelze vypočítat. Budoucí objekt, který je zástupným symbolem pro výsledek vyvolání metody, je vrácen. Z pohledu subsystému volajícího neexistuje žádný rozdíl mezi budoucím objektem a objektem, který by byl vrácen, kdyby bylo stejné volání provedeno na pasivním objektu.
Poté, co se obě metody vrátily, volající vlákno pokračuje v provádění svého kódu, jako kdyby bylo volání skutečně provedeno. Úlohou budoucího mechanismu je blokovat vlákno volajícího, když bože
metoda je vyvolána proti
a výsledek ještě nebyl nastaven: tato zásada synchronizace mezi objekty je známá jako čekání na nutnost.
Viz také
Reference
- ^ Caromel, Denis (září 1993). "Směrem k metodě objektově orientovaného souběžného programování". Komunikace ACM. 36 (9): 90–102. doi:10.1145/162685.162711.
- ^ Baduel, Laurent; Baude, Françoise; Caromel, Denis; Contes, Arnaud; Huet, Fabrice; Morel, Matthieu; Quilici, Romain (leden 2006). Cunha, José C .; Rana, Omer F. (eds.). Programování, skládání, nasazení pro síť (PDF). Grid Computing: Softwarová prostředí a nástroje (PDF). Sprinter-Verlag. str. 205–229. CiteSeerX 10.1.1.58.7806. doi:10.1007/1-84628-339-6_9. ISBN 978-1-85233-998-2. CiteSeerX: 10.1.1.58.7806.
- ^ Caromel, Denis; Henrio, Ludovic (2005). Teorie distribuovaných objektů: asynchronie, mobilita, skupiny, komponenty. Berlín: Springer. ISBN 978-3-540-20866-2. LCCN 2005923024.
Další čtení
- Ranaldo, N .; Tretola, G .; Zimeo, E. (14. – 18. Dubna 2008). Plánování aktivit ProActive s motorem pracovního postupu založeným na XPDL. Paralelní a distribuované zpracování. Miami: IEEE. s. 1–8. doi:10.1109 / IPDPS.2008.4536336. ISBN 978-1-4244-1693-6. ISSN 1530-2075.
- Sun, Hailong; Zhu, Yanmin; Hu, Chunming; Huai, Jinpeng; Liu, Yunhao; Li, Jianxin (2005). "Počáteční zkušenosti s nasazením vzdálených a horkých služeb s důvěryhodností v CROWN Grid". V Cao, Jiannong; Nejdl, Wolfgang; Xu, Ming (eds.). Pokročilé technologie paralelního zpracování. Přednášky z informatiky. 3756. Berlín: Springer. 301–312. doi:10.1007/11573937_33. ISBN 978-3-540-29639-3.
- Quéma, Vivien; Balter, Roland; Bellissard, Luc; Féliot, David; Freyssinet, André; Lacourte, Serge (2004). "Asynchronní, hierarchické a škálovatelné nasazení aplikací založených na komponentách". In Emmerich, Wolfgang; Vlk, Alexander L. (eds.). Nasazení komponent. Přednášky z informatiky. 3083. Berlín: Springer. str. 50–64. doi:10.1007/978-3-540-24848-4_4. ISBN 978-3-540-22059-6.
- ProActive-CLIF-Fractal získal ocenění OW2 2012
- Software pro odemknutí síly sítě (výsledky ICT)
- ActiveEon et MetaQuant renforcent leur partenariat sur le Cloud ProActive (francouzsky)