파이프라인(소프트웨어)

Pipeline (software)

소프트웨어 엔지니어링에서 파이프라인은 프로세스 요소(프로세스, 스레드, 코루틴, 함수 등)의 연쇄로 구성되어 있으며, 각 요소의 출력이 다음 요소의 입력이 되도록 배열되어 있습니다.이 이름은 물리적 파이프라인과 유사합니다.보통 연속된 요소 간에 어느 정도의 버퍼링이 제공됩니다.이러한 파이프라인을 흐르는 정보는 많은 경우 레코드, 바이트 또는 비트스트림이며 파이프라인의 요소는 필터라고 불리기도 합니다.이것은 파이프필터 설계 패턴이라고도 불립니다.요소를 파이프라인에 연결하는 것은 함수 구성과 유사합니다.

좁게 말하면 파이프라인은 선형이며 단방향이지만, 더 일반적인 흐름에 이 용어를 적용하는 경우도 있습니다.예를 들어, 주로 단방향 파이프라인은 렉서 해킹과 같이 리턴 채널 또는 백채널로 알려진 다른 방향의 통신을 가질 수도 있고, 파이프라인이 완전히 양방향일 수도 있습니다.단방향 트리와 지향성 비순환형 그래프 토폴로지가 있는 흐름은 (선형) 파이프라인과 유사하게 동작합니다. 즉, 사이클이 없기 때문에 파이프라인이라고 할 수 있습니다.

실행

파이프라인은 프로세스와 동시에 모든 요소를 실행하고 업스트림 프로세스에 의해 작성된 데이터를 각 프로세스별로 데이터 읽기 요구를 자동으로 처리함으로써 멀티태스킹 OS에 구현되는 경우가 많습니다.이것은 멀티프로세싱된 파이프라인이라고 불립니다.이와 같이 CPU는 아이돌 시간을 최소화하기 위해 스케줄러에 의해 프로세스 간에 자연스럽게 전환됩니다.다른 일반적인 모델에서는 프로세스와 관련된 OS 오버헤드를 줄이기 위해 요소를 경량 스레드 또는 코루틴으로 구현합니다.OS에 따라서는 OS 또는 스레드 매니저에 의해 스레드가 직접 스케줄 될 수 있습니다.코루틴은 항상 어떤 형태로든 코루틴 매니저에 의해 스케줄 됩니다.

통상, 읽기 요구와 쓰기 요구는 블록 조작입니다.즉, 기입시에 소스 프로세스의 실행은, 모든 데이터를 행선지 프로세스에 쓸 수 있을 때까지 일시 정지됩니다.또, 읽기시에 행선지 프로세스의 실행은, 적어도 몇개의 요구 데이터를 취득할 수 있을 때까지 정지됩니다.e소스 프로세스두 프로세스 중 적어도1개의 프로세스가 곧 운영체제에 의해 처리되어 계속 실행되기 때문에 두 프로세스가 서로 응답할 때까지 무기한 대기하는 교착상태로 이어질 수 없습니다.

성능을 위해 파이프를 구현하는 대부분의 운영 체제는 파이프 버퍼를 사용합니다.이 버퍼를 사용하면 소스 프로세스가 현재 수신할 수 있거나 수신할 수 있는 것보다 더 많은 데이터를 제공할 수 있습니다.대부분의 Unice 및 Unix 유사 운영 체제에서는 훨씬 더 크고 구성 가능한 크기의 파이프 버퍼(일반적으로 "버퍼"라고 함)를 구현하는 특수 명령도 사용할 수 있습니다.이 명령어는, 행선지 프로세스가 송신원프로세스보다 큰폭으로 느린 경우에 도움이 됩니다만, 어쨌든, 송신원프로세스가 가능한 한 빨리 작업을 완료할 수 있는 것이 바람직합니다.예를 들어 소스 프로세스가 CD에서 오디오 트랙을 읽어내는 명령어로 구성되어 있고, 수신처 프로세스가 파형 오디오 데이터를 MP3와 같은 형식으로 압축하는 명령어로 구성되어 있는 경우.이 경우 파이프 버퍼에서 전체 트랙을 버퍼링하면 CD 드라이브의 회전 속도가 더 빨라지고 사용자가 인코딩 프로세스가 완료되기 전에 드라이브에서 CD를 제거할 수 있습니다.

이러한 버퍼 명령어는 데이터 읽기 및 쓰기에 대한 시스템 호출을 사용하여 구현할 수 있습니다.폴링, 셀렉트, 멀티스레딩 의 설비를 사용하면 불필요한 비지 웨이트를 피할 수 있습니다.

파이프라인 소프트웨어 시스템의 몇 가지 주목할 만한 예는 다음과 같습니다.

  • RaftLib – C/C++ Apache 2.0 라이선스

VM/CMS 및 z/OS

CMS 파이프라인은 VM/CMS 및 z/OS 시스템에 대한 파이프라인 아이디어의 포트입니다.Unix 쉘보다 훨씬 복잡한 파이프라인 구조를 지원하며, 여러 입력 스트림을 수행하고 여러 출력 스트림을 생성합니다.(이러한 기능은 Unix 커널에 의해 지원되지만 복잡한 구문과 블로킹모드에 사용되는 프로그램은 거의 없습니다만, 일부 셸은 임의의 파일 기술자 할당을 통해 이를 지원합니다).

IBM 메인프레임 운영 체제의 기존 애플리케이션 프로그램에는 리디렉션 또는 배관을 허용하는 표준 입력 및 출력 스트림이 없습니다.CMS 파이프라인은 외부 프로그램으로 프로세스를 생성하는 대신 파이프라인을 실행하기 위해 내장된 프로그램의 인스턴스를 동시에 실행할 수 있는 경량 디스패처를 갖추고 있습니다.일반적인 UNIX 유틸리티를 실장해, 디바이스와 operating system 서비스에의 인터페이스를 실현하는 200개가 넘는 임베디바이스와 operating system의 서비스.CMS 파이프라인은 내장된 프로그램 외에도 파이프라인에서 사용할 수 있는 입력 및 출력 스트림을 사용하여 사용자가 작성한 REXX 프로그램을 허용하는 프레임워크를 정의합니다.

IBM 메인프레임의 데이터는 일반적으로 레코드 지향 파일 시스템에 있으며 연결된 I/O 장치는 스트림 모드가 아닌 레코드 모드로 작동합니다.그 결과, CMS Pipeline(CMS 파이프라인)의 데이터는 기록 모드로 처리됩니다.텍스트 파일의 경우 레코드에 텍스트가 한 줄씩 저장됩니다.일반적으로 CMS 파이프라인은 데이터를 버퍼링하지 않고 록스텝 방식으로 프로그램 간에 데이터 레코드를 전달합니다.이것에 의해, 상호 접속된 파이프라인의 네트워크를 개입시켜 데이터의 결정론적 플로우가 보증됩니다.

오브젝트 파이프라인

바이트 스트림 기반 파이프라인 외에 오브젝트 파이프라인도 있습니다.오브젝트 파이프라인에서 처리 요소는 텍스트 대신 오브젝트를 출력합니다.Windows PowerShell에는 를 전송하는 내부 개체 파이프라인이 포함되어 있습니다.PowerShell 런타임 내 함수 간의 NET 개체입니다.림보 프로그래밍 언어에서 발견되는 채널은 이 은유의 또 다른 입니다.

GUI에서의 파이프라인

RISC OS나 ROX Desktop 등의 그래픽 환경에서도 파이프라인이 사용됩니다.RISC OS 및 ROX에서는 파일 매니저가 포함된 저장 대화 상자가 제공되어 사용자가 프로그램을 사용하여 데이터를 쓸 위치를 지정할 수 있는 것이 아니라 아이콘(및 이름을 지정하는 필드)이 포함된 저장 대화 상자가 제공됩니다.대상은 아이콘을 드래그 앤 드롭하여 지정합니다.사용자는 이미 저장된 파일을 다른 프로그램의 아이콘에 드롭할 수 있는 위치에 아이콘을 드롭할 수 있습니다.아이콘을 프로그램 아이콘에 놓으면 해당 아이콘이 로드되고, 그렇지 않으면 저장되었을 컨텐츠가 새 프로그램의 표준 입력 스트림에 전달됩니다.

예를 들어 월드와이드 웹을 브라우징하는 사용자가 편집하고 다시 업로드하려는 .gz 압축 이미지를 발견할 수 있습니다.GUI 파이프라인을 사용하여 링크를 아카이브 해제 프로그램으로 드래그하고, 추출된 콘텐츠를 나타내는 아이콘을 이미지 에디터로 드래그하고, 편집하고, Save as 대화상자를 열고, 아이콘을 업로드 소프트웨어로 드래그할 수 있습니다.

개념적으로 이 방법은 기존의 저장 대화 상자에서 사용할 수 있지만, 이를 위해서는 사용자의 프로그램이 파일 시스템에서 탐색할 수 있는 명확하고 쉽게 액세스할 수 있는 위치를 가져야 합니다.실제로는 그렇지 않은 경우가 많기 때문에 GUI 파이프라인은 거의 없습니다.

기타 고려사항

파이프라인이라는 이름은 파이프라인은 보통 물이[1] 파이프에 흐르듯이 정보가 한 방향으로만 흐를 수 있다는 점에서 물리적 배관과 대략적으로 유사합니다.

파이프와 필터는 바이트 스트림을 데이터 개체로 사용하는 기능 프로그래밍의 한 형태로 볼 수 있습니다. 구체적으로는 I/[2]O용 모나드의 특정 형태로 볼 수 있습니다.

파이프라인의 개념은 또한 Cocoon 웹 개발 프레임워크 또는 XProc(W3C 표준) 구현의 중심이며, 최종 표시 전에 소스 스트림을 수정할 수 있습니다.

이 패턴은 프로그램의 입력 및 출력으로 텍스트 스트림을 사용하는 것을 권장합니다.텍스트 프로그램에 그래픽 셸을 작성할 때 텍스트에 대한 이러한 의존도를 고려해야 합니다.

「 」를 참조해 주세요.

메모들

  1. ^ 파이프 파손 신호와 같은 예외가 있습니다.
  2. ^ "모나딕 I/OUNIX프로그래밍"

외부 링크