문제

나는 조금 읽고있다 흐름 기반 프로그래밍 지난 며칠 동안.이있다 위키 자세한 내용을 제공합니다.그리고 위키피디아에는 좋은 개요 그것에도.나의 첫 번째 생각은 "레고랜드 가상 프로그래밍의 또 다른 위대한 지지자"였습니다. 이 개념은 80년대 후반으로 거슬러 올라갑니다.그러나 더 읽어보면 흥미가 생겼다는 것을 인정해야 합니다.

  1. 실제 프로젝트에 FBP를 사용해 보셨나요?
  2. FBP에 대해 어떻게 생각하시나요?
  3. FBP에 미래가 있나요?

어떤 의미에서는 절차적 언어가 등장한 이후 우리 업계가 추구해 온 재사용의 성배처럼 보입니다.

도움이 되었습니까?

해결책

흥미로운 토론!어제 나에게 혼란의 일부는 많은 다른 표기법이 유향 호를 사용하지만 다른 것을 의미하는 데 사용된다는 사실 때문일 수 있다는 생각이 들었습니다.FBP에서 라인은 데이터 패킷 스트림이 이동하는 제한된 버퍼를 나타냅니다.구성 요소는 일반적으로 장기간 실행되는 프로세스이므로 스트림은 엄청난 수의 패킷으로 구성될 수 있으며 FBP 응용 프로그램은 매우 오랜 기간 동안 실행될 수 있습니다. 아마도 "영구적으로" 실행될 수도 있습니다(주로 UMass Amherst의 사람들이 작성한 Eon이라는 프로젝트에 대한 2007년 논문 참조). ).버퍼가 (일시적으로) 가득 찼을 때(또는 일시적으로 비어 있을 때) 제한된 버퍼로의 전송이 일시 중단되므로 유한한 리소스를 사용하여 무한한 양의 데이터를 처리할 수 있습니다.

이에 비해 Grafcet의 E는 "단계"를 의미하는 Etapes에서 유래했는데 이는 다소 다른 개념입니다.이러한 종류의 모델(그리고 이러한 모델이 많이 있음)에서 단계 사이의 데이터 흐름은 한 번에 고속 메모리에 보관할 수 있는 것으로 제한되거나 디스크에 보관되어야 합니다.FBP는 또한 단계 기반 시스템에서는 수행하기 어려운 네트워크 루프를 지원합니다. 예를 참조하세요. http://www.jpaulmorrison.com/cgi-bin/wiki.pl?브로커리지응용프로그램 - 이 애플리케이션은 MQSeries와 CORBA를 모두 자연스럽게 사용했습니다.게다가 FBP는 기본적으로 병렬이므로 그리드 네트워크 프로그래밍, 멀티코어 머신 및 현대 컴퓨팅의 다양한 방향에 적합합니다.마지막 코멘트:문헌에서 나는 많은 관련 프로젝트를 찾았지만 그 중 FBP의 모든 특성을 갖춘 프로젝트는 거의 없습니다.내가 수년에 걸쳐 축적한 목록(그 중 다수는 Grafcet보다 더 가깝습니다)은 다음에서 찾을 수 있습니다. http://www.jpaulmorrison.com/cgi-bin/wiki.pl?FlowLikeProjects .

다른 팁

1. 실제 프로젝트에 FBP를 사용 했습니까?

자동화 프로젝트 (Dispatcher, Component Iterface, 다양한 구성 요소, DF 언어, DF 컴파일러, UI) 용 DF 서버를 설계하고 구현했습니다. Bare C ++로 작성되었으며 여러 유닉스 형 시스템 (Linux X86, MIPS, AVR32 등, MAC OSX)에서 실행됩니다. 정교한 흐름 제어, 복잡한 스레드 제어 (너무 고급 구성 요소가 없음)와 같은 몇 가지 기능이 부족하므로 프로토 타입 일뿐입니다. 우리는 현재 완전한 기능 서버에서 작업하고 있습니다. 우리는 프로토 타입을 구현하고 사용하는 동안 많은 것을 배웠습니다.

또한, 우리는 언젠가 시각적 편집자를 만들 것입니다.

2. FBP에 대한 귀하의 의견은 무엇입니까?

2.1. 우선, DataFlow 프로그래밍입니다 궁극적 인 재미

DataFlow 프로그래밍을 만났을 때, 나는 20 년 전에 프로그래밍을 먼저 만났을 때 느낌이 들었습니다. Altough, DF 프로그래밍은 절차 적/OOP 프로그래밍과 다르며 일종의 프로그래밍 일뿐입니다. 발견해야 할 것이 많으며 Sooo 간단한 것들도 있습니다! 경험이 풍부한 프로그래머로서 DF 문제를 충족했을 때 매우 재밌습니다. 이는 매우 기본적인 일이지만 이전에는 완전히 알려지지 않았습니다. 따라서 DF 프로그래밍에 뛰어 들면 처음 "사이클"또는 "조건"을 만난 신인 프로그래머처럼 느껴질 것입니다.

2.2. 특정 아키텍처에만 사용할 수 있습니다

손톱을 망치기위한 망치입니다. DF는 UIS, 웹 서버 등에 적합하지 않습니다.

2.3. DataFlow 아키텍처는 일부 문제에 최적입니다

데이터 흐름 프레임 워크는 마법을 만들 수 있습니다. 원래 파라 렐화를 위해 설계되지 않은 절차를 말릴 수 있습니다. 구성 요소는 단일 스레드이지만 DF 그래프로 구성되면 멀티 스레드가되었습니다.

예 : 당신은 그것을 알고 있습니까? 만들다 DF 시스템입니까? 노력하다 -J를 만들어라 (사람, j를 사용하는 것을 참조하십시오). 멀티 코어 머신이있는 경우 -j가 있거나없는 프로젝트를 컴파일하고 시간을 비교하십시오.

2.4. 문제의 최적 분할

프로그램을 작성하는 경우 종종 소규모 하위 문제에 대한 문제를 분리합니다. 구현할 필요가없는 잘 알려진 하위 프로젝트에는 일반적인 분할 포인트가 있으며 DB 용 SQL 또는 그래픽/애니메이션의 경우 OpenGL과 같은 기존 솔루션을 사용합니다.

DF 아키텍처는 문제를 매우 흥미로운 방법으로 나눕니다.

  • 아키텍처를 제공하는 DataFlow 프레임 워크 (기존 제품 만 사용),
  • 구성 요소 : 프로그래머는 구성 요소를 만듭니다. 구성 요소는 간단하고 잘 분리 된 단위이며 구성 요소를 쉽게 만들 수 있습니다.
  • 구성 : AKA DataFlow 프로그래밍 : 구성자는 프로그래머가 제공 한 구성 요소를 사용하여 데이터 플로 그래프 (프로그램)를 함께 넣습니다.

구성 요소 세트가 잘 설계된 경우, 구성자는 프로그래머가 꿈조차하지 않은 시스템을 구축 할 수 있습니다. Configurator는 새로운 것을 구현할 수 있습니다 특징 프로그래머를 방해하지 않고. 고객은 개인화 된 솔루션을 가지고 있기 때문에 행복합니다. 소프트웨어 제조업체는 또한 고객 별 구성만으로도 소프트웨어의 여러 고객 별 지점을 유지할 필요가 없기 때문에 행복합니다.

2.5. 속도

시스템이 기본 구성 요소에 구축되면 DF 프로그램이 빠릅니다. 유일한 시간 손실은 간단한 OOP 프로그램과 비교하여 구성 요소간에 메시지를 발송하는 것입니다. 또한 최소화됩니다.

3. FBP는 미래가 있습니까?

물론이지.

주된 이유는 새로운 이상한 소프트웨어 아키텍처, 이상한 언어를 도입하지 않고 막대한 멀티 프로세싱 문제를 해결할 수 있기 때문입니다. DataFlow 프로그래밍은 쉽고 구성 요소 프로그래밍 및 DataFlow 구성 빌드를 의미합니다. (DataFlow 프레임 워크조차도 로켓 과학이 아닙니다.)

또한 매우 경제적입니다. 좋은 구성 요소 세트가있는 경우 레고 벽돌 만 합치면됩니다. DF 프로그램은 유지하기 쉽습니다. DF 구성 빌딩에는 숙련 된 프로그래머가 필요하지 않고 시스템 통합 자입니다.

네이티브 시스템이 퍼지면 사용자 정의 구성 요소를 만들기 위해 문이 열려서 행복 할 것입니다. 또한 표준 DF 언어가 있어야하므로 플랫폼 독립적 인 시각적 편집기 및 여러 DF 서버와 함께 사용할 수 있습니다.

FSM을 구현하는 수단이라는 FBP에 대한 의견에 동의하지 않아야합니다. FSM이 깔끔하다고 생각하며 응용 프로그램 구축에 명확한 역할이 있다고 생각하지만 FBP의 핵심 개념은 여러 구성 요소 프로세스가 실행 중입니다. 비동기 적으로, 현재 바인딩 버퍼라고 불리는 데이터 청크 스트림을 통해 통신합니다. 예, 확실히 FSM은 구성 요소 프로세스를 구축하는 한 가지 방법이며, 실제로이 아이디어에 전념하는 FBP에 관한 내 책과 관련 PDA의 전체 장이 있습니다 (PDA).1) - http://www.jpaulmorrison.com/fbp/compil.htm - 그러나 제 생각에는 사소한 FBP 네트워크를 구현하는 FSM은 불가능할 것입니다. 예를 들어 표시된 다이어그램http://www.jpaulmorrison.com/fbp/image010.jpga의 약 1/3입니다 하나의 메인 프레임에서 실행되는 배치 작업. 이러한 블록은 모든 블록이 다른 모든 것과 비동기로 실행됩니다. 그건 그렇고, 나는 첫 번째 게시물의 질문에 대한 더 많은 답변을 듣는 데 매우 관심이있을 것입니다!

1: http://en.wikipedia.org/wiki/pushdown_automaton 푸시 다운 오토마타

흐름 기반 프로그래밍이라는 용어를들을 때마다 나는 개념적으로 labview를 생각합니다. IE 구성 요소 프로세스 스케줄링은 주로 입력 데이터의 변경에 의해 주도됩니다. 이것은 실제로 LabView 플랫폼이 최신 MindStorm 제품에 사용되었다는 점에서 레고 프로그래밍입니다. 그러나 이것이 덜 유용한 프로그래밍 모델이된다는 것에 동의하지 않습니다.

일반적으로 데이터 수집, 제어 및 자동화를 포함하는 산업 시스템의 경우 매우 잘 맞습니다. 데이터 아웃으로 변환 된 데이터가 아닌 경우 제어 시스템은 무엇입니까? 즉, 제어 체계의 어떤 구성 요소가 더 큰 그림에서 블랙 박스로 표현하는 것을 선호하지 않습니까? 다른 방법론을 사용하여 해당 수준의 아키텍처 선명도를 달성하려면 데이터 도메인 클래스 다이어그램을 그린 다음 문제 도메인 실행 시간 클래스 관계를 그린 다음 사용 사례 다이어그램을 뒤집어주고 넘어 가야합니다. Flow Driven Systems를 사용하면 구성 요소를 구축하고 정의하면 시스템을 현실적으로 현실적으로 설계 할 수 있도록이 정보를 많이 붕괴시킬 수있는 사치가 있습니다.

LabView에 작성된 응용 프로그램을 볼 때 묻지 않아도 한 가지 질문은 "이 값을 설정하는 코드를 설정하는 것은 무엇입니까?"입니다. 데이터에서 거꾸로 추적하기가 쉬웠으며, 무모한 작가와 같은 실수는 불가능했기 때문에 불가능했습니다. 실수로 만듭니다.

보다 일반적으로 절차 적 방식으로 작성된 코드에만 해당된다면!

1) 나는 이상 탐지 프로젝트를위한 작은 FBP 프레임 워크를 구축했으며 좋은 아이디어로 밝혀졌습니다.

당신은 또한 일부를 볼 수 있습니다 Knime 비디오, 그것은 훌륭한 팀이 프레임 워크를 구성 할 때 플로우 기반 프레임 워크가 어떤 느낌인지에 대한 좋은 아이디어를 제공합니다. 물론, 그것은 배치 기반이며 연속 작동을 위해 만들어지지 않습니다.

그러나 흐름 기반 프로그래밍의 가장 좋은 예는 유닉스 파이프 가장 오래되고 가장 간과 된 FBP 프레임 워크 중 하나입니다. 나는 닉스 파이프의 힘에 대해 자세히 설명 할 필요가 없다고 생각합니다 ...

2) FBP는 큰 문제를위한 매우 강력한 도구입니다. 본질적인 병렬 처리는 큰 이점이며 어댑터 모듈을 사용하여 모든 FBP 프레임 워크를 완전히 네트워크로 만들 수 있습니다. 스마트 프레임 워크는 또한 터무니없는 결함 허용이며 필요할 때 충돌 모듈을 동적으로 다시로드 할 수 있습니다. 개념적 단순성은 또한 프로젝트에 관련된 모든 사람과 더 깨끗한 코드와 더 깨끗한 커뮤니케이션을 가능하게합니다.

3) 절대적으로! 파이프는 여기에 있으며 유닉스의 가장 강력한 특징 중 하나입니다. 정적 프로그램과 비교하여 FBP 프레임 워크에 내재 된 전력은 일부 프레임 워크를 재구성 할 수있는 시점까지 많고 변화하는 변화 달리는 동안 특별한 조치가 없습니다.

FBP FTW! ;-)

자동차 개발에서 가장 사양 (미디어 지향 시스템 전송)의 일부인 언어 불가지론 메시징 프로토콜을 보유하고 있으며, 이는 네트워크 또는 동일한 장치 내에서 구성 요소간에 통신하도록 설계되었습니다. 시스템에는 일반적으로 실제 및 시각화 된 메시지 버스가 있으므로 유량 기반 프로그래밍 형태가 효과적으로 있습니다.

그것이 몇 년 전에 나에게 전구를 계속 만들었고 나를 여기로 데려 왔습니다. 실제로는 환상적인 방법이며 기존 프로그래밍보다 훨씬 재미 있습니다. 메시지 카탈로그는 중앙 사양과 참조 지점을 형성합니다. 개발자와 관리 모두에게 적합합니다. IE 경영진은 소스를 보는 대신 메시지 카탈로그를 탐색 할 수 있습니다.

통합 로깅을 통해 카탈로그를 참조하여 이해하기 쉬운 분석을 생성하면 실제로 생산성이 높아질 수 있습니다. 이런 식으로 상용 제품을 개발 한 실제 경험이 있습니다. 특히 도구 및 IDE와 관련하여 더 많은 것을 취하는 데 관심이 있습니다. 불행히도 나는 자동차 부문 내의 많은 사람들이 이것이 얼마나 위대한 지에 대한 요점을 놓치고 그에 대한 지적을 놓쳤다 고 생각합니다. 그들은 이제 다른 유행에 의해 산만 해지고 훨씬 더 많은 것이 있다는 것을 깨닫지 못했습니다. 대부분 실제 버스보다 개발.

나는 사용했다 스프링 웹 흐름 Java Web Applications to Model (일반적으로) 애플리케이션 프로세스에 대한 광범위하게, 이는 어떤 페이지를 표시 할 페이지에 대한 조건부 논리가 많은 복잡한 마법사와 같은 업무를하는 경향이 있습니다. 엄청나게 강력합니다. 신제품이 추가되었고 기존 작품을 한 시간 또는 2 시간 안에 완전히 새로운 응용 프로그램 프로세스로 간주했습니다 (몇 가지 새로운 뷰/상태를 추가).

나는 또한 사용을 조사했다 OS 워크 플로 비즈니스 프로세스를 모델링하지만 그 프로젝트는 여러 가지 이유로 통조림을 받았습니다.

Microsoft World에서 당신은 가지고 있습니다 Windows Workflow Foundation ( "WWF"), 특히 인기가 높아지고 있습니다. 공유 지점.

FBP는 단지 a를 구현하는 수단 일뿐입니다 유한 상태 기계. 새로운 것은 아닙니다.

나는 그것이 똑같은 것이 아니라는 것을 알고 있지만,이 모델은 PLC 프로그래밍에서 수년 동안 사용되었습니다. ISO는이를 순차적 흐름도라고 부르지 만 많은 사람들이 인기있는 구현 후이를 grafcet이라고합니다. 병렬 처리를 제공하고 상태 간의 전환을 정의합니다.

요즘 비즈니스 인텔리전스 세계에서 데이터를 매시 처리하고 프로세스하는 데 사용되고 있습니다. ETL, 쿼리, 가입 및 보고서 제작과 같은 데이터 처리 단계는 최종 사용자가 수행 할 수 있습니다. 저는 개방형 시스템의 개발자입니다. composableanalytics.com CA에서는 흐름 기반 앱을 브라우저를 통해 공유하고 실행할 수 있습니다.

이것이 MQ 시리즈, MSMQ 및 JMS를위한 것입니다.

이것은 웹 서비스 및 엔터프라이즈 서비스 버스 구현의 초석입니다.

TIBCO 및 SUN의 JCAPS와 같은 제품은 기본적 으로이 특정 버즈 단어를 사용하지 않고 흐름 기반입니다.

응용 프로그램의 대부분의 작업은 처리 네트워크를 통해 메시지를 전달하는 작은 모듈로 수행됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top