Dataströmsprogrammering
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 4 augusti 2019; kontroller kräver
10 redigeringar .
Dataflödesprogrammering är ett programmeringssätt där ett program modelleras som en dataflödesdigraf mellan operationer, liknande ett dataflödesdiagram . Utvecklad inom mjukvaruteknik sedan 1970 -talet [1] .
Naturlig visuell presentation tillsammans med stöd för samtidighet är två funktioner i detta paradigm som är attraktiva för utvecklare [1] . Naturligtvis involverar dataflödesprogrammering inte nödvändigtvis visuella programmeringsverktyg .
Unix - programmerare är bekanta med dataflödesprogrammering eftersom Unix- skalet använder namngivna pipes och andra sådana interprocesskommunikationsfaciliteter [2] .
Beskrivning
Grunden för arbetet med dataflödesprogram (dataflöde) är aktiveringen av beräkningar på noder (nod), som kan betraktas som svarta lådor , orsakade av ändringar, uppdateringar av indata. En nod (i modellen, toppen av en graf) är ett element som bearbetar indata och omvandlar dem till utdata. Driften av en nod under aktiveringsperioden betraktas som en enda beräkning. Noder skickar och tar emot data genom portar (port) - anslutningspunkter för bågar (grafkanter) och noder. Portar är allt som kopplar en värd till sin miljö. Noder kan ha namn för att skilja dem åt. Resultatet av att beräkna en nod är ofta, men inte nödvändigtvis, en funktion av inmatningen, det vill säga resultatet kan förändras över tiden. Nodens beräkningsarbete kallas aktivering (aktivering, avfyring). I det aktiverade tillståndet tar noden indata, utför beräkningar, skickar utdata till lämpliga portar. De överförda data, oavsett deras typ, kallas tokens . Tokens kommer längs bågar (de kan kallas kanter, länkar, anslutningar). Uppkomsten av data på den inkommande bågen kan orsaka aktivering av noden. Man brukar anta att det inte finns mer än en token i bågen, men i teorin är det möjligt att skapa modeller med obegränsad kapacitet. I mer utvecklade modeller kan bågar smälta samman till en eller förgrena sig [3] [4] .
Som ett resultat av programmering erhålls ett dataflödesprogram - en riktad graf. Alla sätt för interaktion mellan element är uttryckligen inställda av programmeraren. I det enklaste fallet med pipeline -bearbetning (pipeline-dataflöde) kan element specificeras genom en sekvens av enstaka beräkningar. Beräkningar görs i tur och ordning när tokens tas emot vid ingången. Ett sådant schema kallas datadriven exekvering [3] .
Egenskaper
I dataflödesprogrammering kan mer komplexa konfigurationer användas än en pipeline. I synnerhet kan följande funktioner läggas till den enklaste modellen (i en eller annan kombination) [3] :
- Skjut eller dra discipliner för bågar. I det första fallet "skjuts tokens ut" på initiativ av dataproducenten, och i det andra är konsumenten initiativtagaren till tokenbegäran. De två tillvägagångssätten är också kända som datadriven beräkning och efterfrågedriven beräkning [4]
- Föränderlig eller oföränderlig data. Även om oföränderlig data är den bästa metoden för parallell bearbetning, kan vissa implementeringar baserade på imperativa programmeringsspråk kräva föränderlig data med alla nödvändiga synkroniseringsmekanismer .
- Möjlighet att sammanfoga (sammanfoga) och förgrena (dela) bågar. I fallet med en sammanslagning, tar bågens destinationsport emot tokens från någon av de två portarna i början av bågen. Vid forking kopieras token vanligtvis till två mottagare. Sammanslagningar och gafflar kan vara flera.
- Statiskt eller dynamiskt dataflödesprogram. Denna egenskap avser möjligheten till förändringar i dataflödesdiagrammet. Hårdvaruimplementationer tenderar att använda statiska program, men i allmänhet kan grafstrukturen förändras dynamiskt. I ett dynamiskt program kan någon båge ändra sin destinationsport eller bearbetningsnod - dess egenskaper.
- En nod kan vara funktionell eller lagra dess tillstånd (stateful) internt.
- Synkron eller asynkron aktivering. En av de viktigaste parametrarna för att klassificera dataflödessystem. Synkron aktivering innebär en viss förbestämd och planerad aktiveringsordning, byggd med hänsyn till hela programmet som helhet. I ett system med asynkron aktivering tar varje block hand om sin egen nuvarande och aktivering sker när villkor är uppfyllda, till exempel uppkomsten av data vid ingången. System med asynkron aktivering kan kräva bågar med en kapacitet på mer än en token. Aktiveringsschemat kan blandas (hybrid).
- Flera in- och utgångsportar. Närvaron av flera portar kan kräva ändringar av aktiveringsvillkoren. Till exempel kan aktivering ske om minst en av ingångarna har tagit emot data. I mer komplexa fall kan aktiveringsscheman (brandmönster) användas, där för varje port en av fyra relationer till aktivering: 1 - det finns data vid ingången, 0 - det finns inga data vid ingången, X - närvaron av data är likgiltig, * - ovillkorlig aktivering (oavsett förhållandena för andra portar). En nod kan ha flera scheman som kontrolleras efter varandra tills schemat matchar det aktuella tillståndet. Till exempel kommer en treportsnod med schemat "[1, 1, X], [0, X, 0]" att aktiveras om de två första portarna har tagit emot data eller om det inte finns några data på den första och tredje porten .
- Återkopplingar, eller slingor, gör att utströmmen kan användas igen vid beräkningsenhetens ingång. När man arbetar med loopar är det nödvändigt att undvika dödlägen (se dödläge ), där en nod väntar på indata som beror på dess egen utdata. För att arbeta med feedback kan det krävas att man ställer in initiala tokens (även innan programmet startar) för återkopplingsbågar eller att man använder one-shot-noder (one-shot), som aktiveras exakt en gång, i början av programmet.
- Sammansatta noder tillåter att primitiva noder paketeras i större moduler.
- rekursiva noder. En sorts sammansatt nod som innehåller en kopia av sig själv.
- Multi-speed produktion och konsumtion av tokens. För att förbättra prestandan kan aktivering tillåta att flera tokens tas emot och skickas från en port samtidigt.
- Noder med egna portar kallas också för aktörer [5] . Klassiska skådespelare som föreslagits av Carl Hewitt [6] är ett specialfall av dataflödesaktörer, nämligen att de har exakt en ingångsport och ingen utgångsport.
Se även
Anteckningar
- ↑ 1 2 Tiago Boldt Sousa dataflödesprogrammeringskoncept, språk och applikationer Arkiverad 12 november 2020 på Wayback Machine
- ↑ Jon Orwant. Datavetenskap och Perl-programmering: Best of The Perl Journal. - O'Reilly Media, Incorporated, 2002. - S. 146. - 737 sid. — ISBN 9780596003104 .
- ↑ 1 2 3 Carkci, 2014 , 2. Dataflow Explained.
- ↑ 12 Sharp , 1992 , sid. 293.
- ↑ En strukturerad beskrivning av dataflödesaktörer och dess tillämpning [1] Arkiverad 27 juli 2020 på Wayback Machine
- ↑ Hewitt, Carl; Biskop, Peter; Steiger, Richard. A Universal Modular Actor Formalism for Artificial Intelligence (engelska) : tidskrift. — IJCAI, 1973.
Litteratur
- Van-Roy, P. och Haridi, S. Koncept, tekniker och modeller för datorprogrammering. - Prentice-Hall, 2004. - 900 sid. — ISBN 9780262220699 .
- Sharp, JA Data Flow Computing: Teori och praktik. - Intellect, Limited, 1992. - 566 sid. — ISBN 9780893919214 .
- Carkci, M. Dataflow och reaktiva programmeringssystem: En praktisk guide. - CreateSpace Independent Publishing Platform, 2014. - 570 sid. — ISBN 9781497422445 .
- Gehani, N. Ada: Samtidig programmering. - Silicon Press, 1991. - P. xii. — 216 sid. — ISBN 9780929306087 . * Bebis, G. och Boyle, R. och Parvin, B. och Koracin, D. och Wang, S. och Kyungnam, K. och Benes, B. och Moreland, K. och Borst, C. och DiVerdi, S. och andra. Framsteg inom Visual Computing: 7th International Symposium, ISVC 2011, Las Vegas, NV, USA, 26-28 september 2011. Proceedings. - Springer Berlin Heidelberg, 2011. - S. 260. - ISBN 9783642240317 .
- Gengnagel, C. och Kilian, A. och Nembrini, J. och Scheurer, F. Rethinking Prototyping: Proceedings of the Design Modeling Symposium Berlin 2013. - epubli GmbH, 2013. - P. 53-55. — 662 sid. — ISBN 9783844268454 .
- Kent, A. Dataflow languages // Encyclopedia of Library and Information Science: Volume 66 - Supplement 29 - Automated System for the Generation of Document Indexes to Volume Visualization. — Taylor & Francis, 2000. — S. 101-. – 500p. — ISBN 9780824720667 .
- Wesley M. Johnston, JR Paul Hanna, Richard J. Millar. Framsteg inom dataflödesprogrammeringsspråk . ACM Computing Surveys, vol. 36, nr. 1, mars 2004, sid. 1–34.
Länkar