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:

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å

Referencer

eksterne links