Dataflow programmering - Dataflow programming
I computerprogrammering er dataflow -programmering et programmeringsparadigme, der modellerer et program som en rettet graf over dataene, der flyder mellem operationer, og dermed implementerer dataflow -principper og arkitektur. Dataflow programmeringssprog deler nogle funktioner i funktionelle sprog og blev generelt udviklet for at bringe nogle funktionelle begreber til et sprog, der er mere egnet til numerisk behandling. Nogle forfattere bruger udtrykket datastream i stedet for dataflow for at undgå forvirring med dataflow -computing eller dataflow -arkitektur , baseret på et ubestemt maskinparadigme. Dataflow -programmering blev banebrydende af Jack Dennis og hans kandidatstuderende på MIT i 1960'erne.
Egenskaber for dataflow -programmeringssprog
Traditionelt er et program modelleret som en række operationer, der sker i en bestemt rækkefølge; dette kan betegnes som sekventiel, proceduremæssig, kontrolstrøm (hvilket indikerer, at programmet vælger en bestemt sti), eller tvingende programmering . Programmet fokuserer på kommandoer, i tråd med von Neumann visionen om sekventiel programmering, hvor data normalt er "i hvile".
I modsætning hertil understreger dataflow -programmering bevægelsen af data og modeller programmer som en række forbindelser. Eksplicit definerede input og output forbinder operationer, der fungerer som sorte bokse . En operation kører, så snart alle dens input bliver gyldige. Dataflow -sprog er således i sagens natur parallelle og kan fungere godt i store, decentrale systemer.
Stat
Et af nøglebegreberne i computerprogrammering er ideen om stat , i det væsentlige et øjebliksbillede af forskellige forhold i systemet. De fleste programmeringssprog kræver en betydelig mængde statsinformation, som generelt er skjult for programmøren. Ofte aner computeren ikke selv, hvilket stykke information der koder for den varige tilstand. Dette er et alvorligt problem, da statsoplysningerne skal deles på tværs af flere processorer i parallelle behandlingsmaskiner . De fleste sprog tvinger programmereren til at tilføje ekstra kode for at angive, hvilke data og dele af koden der er vigtige for staten. Denne kode har en tendens til at være både dyr i forhold til ydelse såvel som vanskelig at læse eller fejlsøge. Eksplicit parallelisme er en af hovedårsagerne til den dårlige ydelse af Enterprise Java Beans, når man bygger dataintensive, ikke- OLTP- applikationer.
Hvor et sekventielt program kan forestilles som en enkelt medarbejder, der bevæger sig mellem opgaver (operationer), ligner et dataforløbsprogram mere en række arbejdere på en samlebånd , der hver udfører en bestemt opgave, når der er materialer tilgængelige. Da operationerne kun vedrører tilgængeligheden af datainput, har de ingen skjult tilstand at spore og er alle "klar" på samme tid.
Repræsentation
Dataflow -programmer er repræsenteret på forskellige måder. Et traditionelt program er normalt repræsenteret som en række tekstinstruktioner, hvilket er rimeligt til at beskrive et serielt system, der leder data mellem små, enkeltværktøjer, der modtager, behandler og returnerer. Dataflow -programmer starter med et input, måske kommandolinjeparametrene , og illustrerer, hvordan disse data bruges og ændres. Datastrømmen er eksplicit, ofte visuelt illustreret som en linje eller et rør.
Med hensyn til kodning kan et dataflow -program muligvis implementeres som en hashtabel , med entydigt identificerede input som nøglerne, der bruges til at slå pointer til vejledningen op. Når en handling er afsluttet, scanner programmet listen over operationer, indtil det finder den første operation, hvor alle input aktuelt er gyldige, og kører det. Når denne operation er afsluttet, vil den typisk udsende data og derved få en anden operation til at blive gyldig.
Ved parallel drift skal kun listen deles; det er tilstanden for hele programmet. Således fjernes opgaven med at opretholde tilstanden fra programmøren og gives til sprogets runtime . På maskiner med en enkelt processorkerne, hvor en implementering designet til parallel drift simpelthen ville introducere overhead, kan denne overhead fjernes helt ved hjælp af en anden driftstid.
Historie
Et pioner dataflow -sprog var BLODI (BLOck Diagram), udviklet af John Larry Kelly, Jr. , Carol Lochbaum og Victor A. Vyssotsky til specificering af stikprøvesystemer . En BLODI -specifikation af funktionelle enheder (forstærkere, addere, forsinkelseslinjer osv.) Og deres sammenkoblinger blev samlet til en enkelt sløjfe, der opdaterede hele systemet til et ur -kryds.
I en ph.d. fra 1966 afhandling, The On-line Graphical Specification of Computer Procedures , skabte Bert Sutherland en af de første grafiske programmeringsrammer for dataflow for at gøre parallel programmering lettere. Efterfølgende dataflow -sprog blev ofte udviklet på de store supercomputerlaboratorier . POGOL, et ellers konventionelt databehandlingssprog udviklet på NSA , kompilerede applikationer i stor skala, der består af flere fil-til-fil-operationer, f.eks. Flet, vælg, opsummer eller transformer til effektiv kode, der eliminerede oprettelse af eller skrivning til mellemliggende filer i størst muligt omfang. SISAL , et populært dataflow-sprog udviklet på Lawrence Livermore National Laboratory , ligner de fleste sætningsdrevne sprog, men variabler bør tildeles en gang . Dette gør det muligt for kompilatoren let at identificere input og output. En række offshoots af SISAL er blevet udviklet, herunder SAC , Single Assignment C , som forsøger at forblive så tæt på det populære C -programmeringssprog som muligt.
Den amerikanske flåde finansierede udviklingen af ACOS og SPGN (signalbehandling graf notation), der begyndte i begyndelsen af 1980'erne. Dette er i brug på en række platforme i feltet i dag.
Et mere radikalt begreb er Prograph , hvor programmer er konstrueret som grafer på skærmen, og variabler helt erstattes med linjer, der forbinder input til output. I øvrigt blev Prograph oprindeligt skrevet på Macintosh , som forblev single-processor indtil introduktionen af DayStar Genesis MP i 1996.
Der er mange hardware -arkitekturer orienteret mod effektiv implementering af dataflow -programmeringsmodeller. MIT's mærkede token dataflow -arkitektur blev designet af Greg Papadopoulos .
Data flow er blevet foreslået som en abstraktion til angivelse af globale opførsel af distribuerede systemkomponenter: i de levende distribuerede objekter programmering model, distribuerede datastrømme er vant til at opbevare og formidle stat, og som sådan, de spiller rollen analogt med variabler, marker , og parametre i Java-lignende programmeringssprog.
Sprog
Dataflow -programmeringssprog inkluderer:
- ASCET
- AviSynth -scriptsprog til videobehandling
- BMDFM Binary Modular Dataflow Machine
- CAL
- Skriftskrift , et funktionelt arbejdsgangssprog.
- CMS -rørledninger
- Hume
- Joule
- Nøglesyn VEE
- KNIME er en gratis og open-source platform til dataanalyse, rapportering og integration
- LabVIEW , G
- Linda
- Klar
- Glans
- Maks/MSP
- Microsoft Visual Programming Language - En komponent i Microsoft Robotics Studio designet til robotteknologi programmering
- Orange - Et open -source, visuelt programmeringsværktøj til datamining , statistisk dataanalyse og maskinlæring .
- Oz nu også distribueret siden 1.4.0
- Pipeline Pilot
- Prograf
- Ren data
- Kvartskomponist - Designet af Apple ; bruges til grafiske animationer og effekter
- SAC Enkelt opgave C
- SIGNAL (et dataflow-orienteret synkront sprog, der muliggør multi-clock specifikationer)
- Simulink
- SISAL
- SystemVerilog - Et hardware beskrivelsessprog
- Verilog - Et hardware beskrivelsessprog absorberet i SystemVerilog -standarden i 2009
- VHDL - Et hardware beskrivelsessprog
- XEE (Starlight) XML -teknikmiljø
- XProc
Applikationsprogrammeringsgrænseflader
- Apache Beam : Java/Scala SDK, der forener streaming (og batch) behandling med flere eksekveringsmotorer understøttet (Spark, Flink, Google dataflow ...)
- Apache Flink : Java/Scala bibliotek, der tillader streaming (og batch) beregninger at blive kørt oven på en distribueret Hadoop (eller anden) klynge
- SystemC : Bibliotek til C ++, primært rettet mod hardware design.
- TensorFlow : Et bibliotek til maskinlæring baseret på dataflow-programmering.
Se også
- Skuespiller model
- Datadrevet programmering
- Digital signalbehandling
- Arrangementsstyret programmering
- Flowbaseret programmering
- Funktionel reaktiv programmering
- Ordliste over rekonfigurerbar computing
- Højtydende rekonfigurerbar computing
- Inkrementel computing
- Parallel programmeringsmodel
- Opdelt globalt adresserum
- Pipeline (Unix)
- Kvantekredsløb
- Signal programmering
- Stream behandling
- Yahoo rør
Referencer
eksterne links
- Bog: Dataflow og reaktive programmeringssystemer
- Grundlæggende om Dataflow -programmering i F# og C#
- Dataflow -programmering - koncept, sprog og applikationer
- Statisk planlægning af synkrone dataflowprogrammer til digital signalbehandling
- Håndtering af store belastninger uden at tilføje kompleksitet De grundlæggende begreber i dataflowprogrammering, Dr. Dobb's, september 2011
- Pure Function Pipeline Data Flow