Кіріспе

Компьютерлік бағдарламалау парадигмасы
Компьютерлік бағдарламалауда деректер ағыны бағдарламалау – бағдарламаны операциялар арасындағы деректер ағынының бағытталған графигі ретінде модельдеу, осы арқылы деректер ағыны принциптері мен архитектурасын іске асыру. Деректер ағыны бағдарламалау тілдері функционалдық тілдердің кейбір ерекшеліктерін бөліседі және сандық өңдеуге ыңғайлырақ тілге функционалдық ұғымдарды енгізу мақсатында дамытылған. Кейбір авторлар деректер ағыны есептеуі немесе деректер ағыны архитектурасымен шатасуды болдырмау үшін "деректер ағыны" терминінің орнына "деректер тогы" терминін қолданады, бұл белгісіз машина парадигмасына негізделген. Деректер ағыны бағдарламалауды 1960 жылдары MIT-де Джек Деннис және оның аспиранттары алғаш рет енгізді.

Мемлекет

Компьютерлік бағдарламалаудағы негізгі ұғымдардың бірі – күйдің идеясы, жүйедегі әртүрлі жағдайлардың тікелей көрінісі. Көптеген бағдарламалау тілдері бағдарламашыдан жасырын болатын, үлкен көлемдегі күй ақпаратын қажет етеді. Көбінесе компьютердің өзі қандай ақпараттың тұрақты күйді кодтайтынын білмейді. Бұл маңызды мәселе, себебі күй ақпаратын параллель өңдеу машиналарын пайдалана отырып, бірнеше процессорлармен бөлісу қажет. Көптеген тілдер бағдарламашыны күй үшін маңызды деректер мен код бөліктерін көрсету үшін қосымша код қосуға мәжбүрлейді. Мұндай код өнімділік тұрғысынан қымбатқа соғады, сонымен қатар оқуға және түзетуге қиындық тудырады. Ашық параллелизм – Enterprise Java Beans-тың деректерге көп жүктеме түсетін, OLTP емес қосымшаларды құрастыру кезінде нашар жұмыс істеуінің басты себептерінің бірі. Сәуірлі бағдарламаны тапсырмалар (операциялар) арасында жылжып жүретін бір жұмысшы ретінде қарастыруға болады, ал деректер ағыны бағдарламасы – конвейердегі жұмысшылардың тізбегіне ұқсайды, олар материал келген кезде әрқайсысы белгілі бір тапсырманы орындайды. Операциялар тек деректердің болуымен ғана айналысады, сондықтан олардың жасырын күйін қадағалау қажет емес және барлығы бір уақытта "дайын" болады.

Өкілдік

Деректер ағыны бағдарламалары әртүрлі жолдармен ұсынылады. Дәстүрлі бағдарлама әдетте мәтіндік нұсқаулар тізбегі ретінде ұсынылады, бұл деректерді қабылдайтын, өңдейтін және қайтаратын шағын, бір мақсатты құралдар арасында жіберетін тізбектік жүйені сипаттау үшін қолайлы. Деректер ағыны бағдарламалары кіріспен, мысалы, командалық жол параметрлерімен басталады және осы деректердің қалай пайдаланылатынын және өңделгенін көрсетеді. Деректер ағыны нақты, көбінесе сызық немесе құбыр түрінде бейнеленеді. Кодтау тұрғысынан алғанда, деректер ағыны бағдарламасы хэш-кесте ретінде жүзеге асырылуы мүмкін, онда бірегей идентификаторлары бар кірістер кілттер ретінде қолданылады, олар нұсқауларға сілтемелерді табу үшін пайдаланылады. Кез келген операция аяқталған кезде, бағдарлама барлық кірістері қазіргі уақытта жарамды болатын бірінші операцияны тауып, оны іске қосу үшін операциялар тізімін қарап шығады. Бұл операция аяқталғаннан кейін, әдетте деректерді шығарады, соның арқасында басқа операция жарамды болады. Параллель жұмыс істеу үшін тек тізімді бөлісу қажет; бұл – бағдарламаның толық күйі. Осылайша, күйді сақтау міндеті бағдарламалаушыдан алынып, тілдің орындалу уақытына жүктеледі. Егер параллель жұмысқа арналған жүзеге асыру тек қосымша шығындарды тудырса, бір процессорлық ядролы машиналарда осы қосымша шығындарды басқа орындалу уақытын пайдалану арқылы толығымен жоюға болады.

Өңдеулік жаңартулар

Кейбір соңғы деректер ағыны кітапханалары, мысалы, Differential/Timely Dataflow деректерді өңдеуді әлдеқайда тиімді ету үшін инкрементті есептеуді пайдаланды.

Тарих

Деректер ағынының алғашқы тілі 1961 жылы Джон Ларри Келли, Дж., Кэрол Лохбаум және Виктор А. Виссоцкий үлгіленген деректер жүйелерін сипаттау үшін жариялаған BLODI (BLOCK DIagram) болды. Функционалдық блоктардың (көбейтілгіштер, қосушылар, кешіктіру желілері және т.б.) және олардың байланыстары бір циклға біріктіріліп, жүйенің күйін әр такта жаңартты. 1966 жылы Ph. D. диссертациясында, «Компьютерлік процедуралардың желілік графикалық сипаттамасы», Берт Сазерленд параллель бағдарламалауды жеңілдету үшін алғашқы графикалық деректер ағыны бағдарламалау аясын жасады. Келесі деректер ағыны тілдері көбінесе ірі суперкомпьютерлік зертханаларда әзірленді. NSA-да жасалған POGOL, әдеттегі деректерді өңдеу тілі, бірнеше файлдан файлға операциялардан (мысалы, біріктіру, таңдау, жиынтықтау немесе түрлендіру) тұратын кең ауқымды қолданбаларды тиімді кодқа жинады, аралық файлдарды жасау немесе жазу қажеттілігін барынша азайтты. Лоуренс Ливермор ұлттық зертханасында жасалған танымал деректер ағыны тілі SISAL, көптеген операторлық тілдерге ұқсас, бірақ айнымалыларға бір рет мән тағайындалуы керек. Бұл компиляторға кіріс және шығыстарды оңай анықтауға мүмкіндік береді. SISAL-дың көптеген туындылары жасалды, соның ішінде SAC, Single Assignment C, C бағдарламалау тіліне мүмкіндігінше жақын болуға тырысады. АҚШ Әскери-теңіз күштері 1980-жылдардың басында ACOS және SPGN (сигналды өңдеу графигінің белгілемесі) әзірлеуін қаржылады. Бұл технология бүгінде көптеген платформаларда қолданылуда. Prograph концепциясы радикалдырақ: бағдарламалар экрандағы графтар түрінде құрастырылады, ал айнымалылар кірістерді шығыстармен байланыстыратын сызықтармен толығымен алмастырылады. Айта кетейік, Prograph бастапқыда Macintosh-та жазылған, ол 1996 жылы DayStar Genesis MP пайда болғанға дейін бірпроцессорлық жүйе болып қалды. Деректер ағыны бағдарламалау модельдерін тиімді жүзеге асыруға бағытталған көптеген аппараттық архитектуралар бар. MIT-тің таңбаланған токендік деректер ағыны архитектурасын Грег Пападопулос жасаған. Деректер ағыны үлестірілген жүйе компоненттерінің жаһандық мінез-құлқын сипаттау үшін абстракция ретінде ұсынылды: «тірі үлестірілген объектілер» бағдарламалау моделінде үлестірілген деректер ағыны күйді сақтау және тарату үшін қолданылады, сондай-ақ Java сияқты тілдердегі айнымалылар, өрістер және параметрлермен салыстырылатын рөл атқарады.