데이터 흐름 프로그래밍

Dataflow programming

컴퓨터 프로그래밍에서 데이터 흐름 프로그래밍은 운영 간에 흐르는 데이터의 방향 그래프로 프로그램을 모델링하여 데이터 흐름 원리와 [1]아키텍처를 구현하는 프로그래밍 패러다임입니다.데이터 플로우 프로그래밍 언어는 기능 언어의 특징을 공유하며, 일반적으로 수치 처리에 더 적합한 언어로 기능 개념을 제공하기 위해 개발되었습니다.일부 저자는 데이터 흐름 대신 데이터 스트림이라는 용어를 사용하여 불확정적인 기계 패러다임을 기반으로 데이터 흐름 컴퓨팅 또는 데이터 흐름 아키텍처와의 혼동을 방지합니다.데이터 플로우 프로그래밍은 1960년대 데니스와 MIT 대학원생들이 개척했습니다.

고려 사항.

전통적으로 프로그램은 특정 순서로 발생하는 일련의 작업으로 모델링됩니다. 이는 순차적,[2]: p.3 절차적,[3] 제어[3] 흐름(프로그램이 특정 경로를 선택했음을 나타냄) 또는 필수 프로그래밍이라고 할 수 있습니다.이 프로그램은 데이터가 일반적으로 "정지 상태"[3]: p.7 인 순차 프로그래밍의 von[2]: p.3 Neumann 비전에 따라 명령에 초점을 맞춥니다.

반면 데이터 흐름 프로그래밍은 데이터의 이동을 강조하고 프로그램을 일련의 연결로 모델링합니다.명시적으로 정의된 입력 및 출력은 블랙박스[3]: p.2 같은 기능을 하는 연결 작업을 수행합니다.모든 입력이 [4]유효해지는 즉시 작업이 실행됩니다.따라서 데이터 흐름 언어는 본질적으로 병렬이며 대규모 분산형 시스템에서 [2]: p.3 [5]잘 작동합니다.[6]

컴퓨터 프로그래밍의 핵심 개념 중 하나는 기본적으로 시스템 내의 다양한 조건의 스냅샷인 상태의 개념입니다.대부분의 프로그래밍 언어에는 상당한 양의 상태 정보가 필요하며, 이는 일반적으로 프로그래머로부터 숨겨집니다.종종, 컴퓨터 자체는 어떤 정보가 지속되는 상태를 인코딩하는지 알지 못합니다.이는 상태 정보를 병렬 처리 기계에서 여러 프로세서로 공유해야 하기 때문에 심각한 문제입니다.대부분의 언어는 프로그래머에게 어떤 데이터와 코드의 일부가 주에 중요한지를 나타내기 위해 추가 코드를 추가하도록 합니다.이 코드는 성능 측면에서는 비싸고 읽기 또는 디버깅이 어려운 경향이 있습니다.데이터 집약적인 비OLTP 애플리케이션을 [citation needed]구축할 때 Enterprise Java Bean의 성능이 저하되는 주요 원인 중 하나는 명시적 병렬 처리입니다.

시퀀셜 프로그램을 작업(작업) 간에 이동하는 단일 작업자로 생각할 수 있는 경우, 데이터 흐름 프로그램은 조립 라인에서 작업하는 일련의 작업자와 비슷하며, 각 작업자는 자재를 사용할 수 있을 때마다 특정 작업을 수행합니다.운영은 데이터 입력의 가용성에만 관심이 있기 때문에 추적할 숨겨진 상태는 없으며 동시에 모두 "준비 완료" 상태입니다.

표현

데이터 흐름 프로그램은 다양한 방식으로 표시됩니다.기존 프로그램은 일반적으로 일련의 텍스트 명령으로 표시되며, 수신, 처리 및 반환되는 소규모 단일 목적 도구 간에 데이터를 파이프하는 직렬 시스템을 설명하는 데 적합합니다.데이터 흐름 프로그램은 입력(명령줄 매개 변수)으로 시작하여 해당 데이터의 사용 및 수정 방법을 보여 줍니다.데이터 흐름은 명확하며 종종 선이나 파이프로 시각적으로 표시됩니다.

인코딩의 관점에서 데이터 플로우 프로그램은 해시 테이블로 구현되며, 고유하게 식별된 입력을 키로 하여 명령에 대한 포인터를 검색하기 위해 사용됩니다.작업이 완료되면 프로그램은 모든 입력이 현재 유효한 첫 번째 작업을 찾을 때까지 작업 목록을 스캔하여 실행합니다.그 조작이 완료되면, 통상은 데이터를 출력해, 다른 조작을 유효하게 합니다.

병렬 동작의 경우 목록만 공유하면 됩니다. 전체 프로그램의 상태입니다.따라서 상태를 유지하는 작업은 프로그래머로부터 제거되고 언어의 런타임에 주어집니다.병렬 동작용으로 설계된 구현으로 단순히 오버헤드가 발생하는 단일 프로세서 코어를 가진 머신에서는 다른 런타임에 의해 이 오버헤드를 완전히 제거할 수 있습니다.

증분 갱신

Differential/Timely Dataflow와 같은 최신 데이터 흐름 라이브러리는 훨씬 더 효율적인 데이터 [1][7][8]처리를 위해 증분 컴퓨팅을 사용하고 있습니다.

역사

선구적인 데이터 흐름 언어는 John Larry Kelly, Jr., Carol Lockebaum 및 Victor A에 의해 개발된 BLODI(BLOCK DIAGRAM)입니다. Vyssotsky: 표본 추출된 데이터 [9]시스템을 지정합니다.기능 유닛(앰프, 애드, 지연 회선 등)과 그 상호 접속의 BLODI 사양이 1 클럭틱의 시스템 전체를 갱신하는 단일 루프로 컴파일되었습니다.

1966년 박사 논문인 The On-line Graphical Specification of Computer Procedures에서 [10]Bert Sutherland는 병렬 프로그래밍을 쉽게 하기 위해 최초의 그래픽 데이터 흐름 프로그래밍 프레임워크 중 하나를 만들었습니다.후속 데이터 흐름 언어는 종종 대형 슈퍼컴퓨터 연구소에서 개발되었습니다.NSA에서 개발된 기존의 데이터 처리 언어인 POGOL은 여러 파일 간 작업(예: 병합, 선택, 요약 또는 변환)으로 구성된 대규모 애플리케이션을 [11]최대한으로 중간 파일의 생성 또는 쓰기를 제거하는 효율적인 코드로 컴파일했습니다.로렌스 리버모어 국립연구소에서 개발된 인기 있는 데이터 흐름 언어인 SISAL은 대부분의 문장 중심 언어처럼 보이지만 변수는 한 번 할당해야 합니다.이를 통해 컴파일러는 입력과 출력을 쉽게 식별할 수 있습니다.SISAL은 SAC, Single Assignment C포함한 다수의 오프스팟이 개발되었으며, 는 인기 있는 C 프로그래밍 언어에 가능한 한 가깝게 유지하려고 노력합니다.

미 해군은 1980년대 초부터 ACOS와 SPGN(신호 처리 그래프 표기법) 개발에 자금을 지원했다.이는 [12]현재 현장의 많은 플랫폼에서 사용되고 있습니다.

보다 급진적인 개념은 Programaph로, 프로그램은 화면상의 그래프로 구성되며 변수는 입력과 출력을 연결하는 라인으로 완전히 대체됩니다.덧붙여서, Programaph는 1996년 DayStar Genesis MP가 등장하기 전까지 단일 프로세서로 유지되었던 Macintosh에서 작성되었습니다.

데이터 플로우 프로그래밍 모델의 효율적인 구현을 지향하는 많은 하드웨어 아키텍처가 있습니다.MIT의 태그 부착 토큰 데이터 흐름 아키텍처는 Greg Papadopulos에 의해 설계되었습니다.

분산 시스템 컴포넌트의 글로벌 동작을 특정하기 위한 추상화로서 데이터 플로우가 제안되어 왔습니다.실시간 분산 객체 프로그래밍 모델에서는 분산 데이터 플로우가 상태를 저장하고 통신하기 위해 사용되므로 Java와 유사한 프로그래밍 언어의 변수, 필드 및 파라미터와 유사한 역할을 합니다.

언어들

데이터 흐름 프로그래밍 언어에는 다음이 포함됩니다.

라이브러리

  • Apache Beam: 스트리밍(및 배치) 처리를 지원하는 여러 실행 엔진(Apache Spark, Apache Flink, Google Dataflow 등)으로 통합하는 Java/Scala SDK
  • Apache Flink: 분산 Hadoop(또는 다른) 클러스터에서 스트리밍(및 배치) 계산을 실행할 수 있는 Java/Scala 라이브러리
  • 아파치 스파크
  • System C: 주로 하드웨어 설계를 목적으로 하는 C++용 라이브러리.
  • TensorFlow: 데이터 흐름 프로그래밍을 기반으로 하는 기계 학습 라이브러리입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Schwarzkopf, Malte (7 March 2020). "The Remarkable Utility of Dataflow Computing". ACM SIGOPS. Retrieved 31 July 2022.
  2. ^ a b c Johnston, Wesley M.; J.R. Paul Hanna; Richard J. Millar (March 2004). "Advances in Dataflow Programming Languages" (PDF). ACM Computing Surveys. 36: 1–34. doi:10.1145/1013208.1013209. S2CID 5257722. Retrieved 15 August 2013.
  3. ^ a b c d e Wadge, William W.; Edward A. Ashcroft (1985). Lucid, the Dataflow Programming Language (illustrated ed.). Academia Press. ISBN 9780127296500. Retrieved 15 August 2013.
  4. ^ a b "Dataflow Programming Basics". Getting Started with NI Products. National Instruments Corporation. Retrieved 15 August 2013.
  5. ^ Harter, Richard. "Data Flow languages and programming - Part I". Richard Harter's World. Archived from the original on 8 December 2015. Retrieved 15 August 2013.
  6. ^ "Why Dataflow Programming Languages are Ideal for Programming Parallel Hardware". Multicore Programming Fundamentals Whitepaper Series. National Instruments Corporation. Retrieved 15 August 2013.
  7. ^ McSherry, Frank; Murray, Derek; Isaacs, Rebecca; Isard, Michael (5 January 2013). "Differential dataflow". Retrieved 31 July 2022.
  8. ^ "Differential Dataflow". Timely Dataflow. 30 July 2022. Retrieved 31 July 2022.
  9. ^ John L. Kelly Jr.; Carol Lochbaum; V. A. Vyssotsky (1961). "A block diagram compiler". Bell System Tech. J. 40 (3): 669–678. doi:10.1002/j.1538-7305.1961.tb03236.x.
  10. ^ W.R. Sutherland (1966). "The On-line Graphical Specification of Computer Procedures". MIT. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  11. ^ Gloria Lambert (1973). "Large scale file processing: POGOL". POPL '73: Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages. ACM. pp. 226–234.
  12. ^ 수중 음향 데이터 처리, Y.T. Chan

외부 링크