Programování toku dat - Dataflow programming

V programování počítače , dataflow programovací je programovací paradigma , že modely program jako orientovaný graf dat proudících mezi operacemi, a tak se provádí dataflow principy a architektury. Programovací jazyky toku dat sdílejí některé funkce funkčních jazyků a byly obecně vyvinuty s cílem přinést některé funkční koncepty do jazyka vhodnějšího pro numerické zpracování. Někteří autoři používají termín datový tok místo toku dat, aby se vyhnuli záměně s výpočty toku dat nebo architekturou toku dat , založené na neurčitém strojovém paradigmatu. Programování toku dat propagoval Jack Dennis a jeho postgraduální studenti na MIT v 60. letech.

Vlastnosti programovacích jazyků toku dat

Program je tradičně modelován jako řada operací probíhajících v určitém pořadí; toto může být označováno jako sekvenční, procedurální, řídicí tok (což naznačuje, že si program vybere konkrétní cestu) nebo imperativní programování . Program se zaměřuje na příkazy, v souladu s von Neumannovou vizí sekvenčního programování, kde jsou data obvykle „v klidu“.

Naproti tomu programování toků dat zdůrazňuje pohyb dat a modeluje programy jako řadu připojení. Explicitně definované vstupy a výstupy spojují operace, které fungují jako černé skříňky . Operace se spustí, jakmile vstoupí v platnost všechny její vstupy. Jazyky toku dat jsou tedy ze své podstaty paralelní a mohou dobře fungovat ve velkých decentralizovaných systémech.

Stát

Jedním z klíčových konceptů počítačového programování je myšlenka stavu , v podstatě snímek různých podmínek v systému. Většina programovacích jazyků vyžaduje značné množství stavových informací, které jsou před programátorem obvykle skryty. Samotný počítač často netuší, která informace zakóduje trvalý stav. Jedná se o vážný problém, protože informace o stavu je třeba sdílet mezi více procesory v paralelních procesorech . Většina jazyků nutí programátora přidat další kód, který indikuje, která data a části kódu jsou pro stát důležité. Tento kód bývá nákladný jak z hlediska výkonu, tak i obtížně čitelný nebo laditelný. Explicitní paralelismus je jedním z hlavních důvodů špatného výkonu Enterprise Java Beans při budování datově náročných aplikací , které nejsou OLTP .

Tam, kde si lze sekvenční program představit jako jediného pracovníka pohybujícího se mezi úkoly (operacemi), je program toku dat spíše sérií pracovníků na montážní lince , z nichž každý provádí konkrétní úkol, kdykoli jsou k dispozici materiály. Protože se operace zabývají pouze dostupností datových vstupů, nemají žádný skrytý stav, který je možné sledovat, a všechny jsou současně „připravené“.

Reprezentace

Programy toku dat jsou zastoupeny různými způsoby. Tradiční program je obvykle reprezentován jako série textových instrukcí, což je rozumné pro popis sériového systému, který přenáší data mezi malé, jednoúčelové nástroje, které přijímají, zpracovávají a vrací. Programy toku dat začínají vstupem, možná parametry příkazového řádku , a ukazují, jak jsou tato data používána a upravována. Tok dat je explicitní, často vizuálně znázorněn jako čára nebo potrubí.

Pokud jde o kódování, program toku dat může být implementován jako hashovací tabulka s jedinečně identifikovanými vstupy jako klíči, které se používají k vyhledání ukazatelů na pokyny. Po dokončení jakékoli operace program prohledá seznam operací, dokud nenajde první operaci, kde jsou všechny vstupy aktuálně platné, a spustí ji. Když tato operace skončí, bude obvykle vydávat data, čímž se stane další operace platnou.

Pro paralelní provoz je třeba sdílet pouze seznam; je to stav celého programu. Úloha udržování stavu je tedy z programátoru odstraněna a dána době běhu jazyka . Na strojích s jedním procesorovým jádrem, kde by implementace navržená pro paralelní provoz jednoduše zavedla režii, lze tuto režii zcela odstranit pomocí jiného běhu.

Dějiny

Průkopnickým jazykem toku dat byl BLODI (BLOck DIagram), vyvinutý Johnem Larrym Kellym, Jr. , Carol Lochbaum a Victor A. Vyssotsky pro specifikaci vzorkovaných datových systémů . Specifikace BLODI funkčních jednotek (zesilovače, sčítače, zpožďovací linky atd.) A jejich propojení byla sestavena do jediné smyčky, která aktualizovala celý systém o jedno hodinové zatržítko.

V roce 1966 Ph.D. práce, On-line grafická specifikace počítačových procedur , Bert Sutherland vytvořil jeden z prvních grafických rámců programování toku dat, aby bylo paralelní programování snazší. Následné jazyky pro tok dat byly často vyvinuty ve velkých laboratořích superpočítačů . POGOL, jinak konvenční jazyk pro zpracování dat vyvinutý v NSA , kompiloval rozsáhlé aplikace složené z více operací soubor-soubor, např. Sloučil, vybral, shrnul nebo transformoval do efektivního kódu, který eliminoval vytváření nebo zápis na střední soubory v maximální možné míře. SISAL , populární jazyk pro tok dat vyvinutý v národní laboratoři Lawrence Livermore , vypadá jako většina jazyků řízených příkazy, ale proměnné by měly být přiřazeny jednou . To umožňuje kompilátoru snadno identifikovat vstupy a výstupy. Řada odnože sisalu byly vyvinuty, včetně SAC , Single přiřazení C , který se snaží zůstat co nejblíže k populárním C programovací jazyk jak je to možné.

Námořnictvo Spojených států financovalo vývoj ACOS a SPGN (zápis grafu zpracování signálu) počínaje počátkem 80. let. To se dnes používá na řadě platforem v této oblasti.

Radikálnějším konceptem je Prograph , ve kterém jsou programy konstruovány jako grafy na obrazovce a proměnné jsou zcela nahrazeny řádky spojujícími vstupy s výstupy. Mimochodem, Prograph byl původně napsán na Macintoshi , který zůstal jednoprocesorovým až do zavedení DayStar Genesis MP v roce 1996.

Existuje mnoho hardwarových architektur orientovaných na efektivní implementaci modelů programování toku dat. Architektura toku dat označených tokenů MIT navrhl Greg Papadopoulos .

Datový tok byl navržen jako abstrakce pro specifikaci globálního chování komponent distribuovaného systému: v modelu programování živých distribuovaných objektů se distribuované datové toky používají k ukládání a komunikaci stavu a jako takové hrají roli analogickou s proměnnými, poli , a parametry v programovacích jazycích podobných Javě.

Jazyky

Mezi programovací jazyky toku dat patří:

Rozhraní pro programování aplikací

  • Apache Beam : Java/Scala SDK, která sjednocuje streamování (a dávkové) zpracování s podporou několika exekučních motorů (Spark, Flink, Google dataflow ...)
  • Apache Flink : knihovna Java/Scala, která umožňuje spouštění streamovaných (a dávkových) výpočtů na distribuovaném clusteru Hadoop (nebo jiném)
  • SystemC : Knihovna pro C ++, zaměřená hlavně na návrh hardwaru.
  • TensorFlow : Knihovna strojového učení založená na programování datových toků .

Viz také

Reference

externí odkazy