Functional Reactive Programming과 Actor 모델은 서로 어떤 관련이 있습니까?


30

FRP는 순수한 기능을 통한 이벤트 및 동작 스트리밍에 관한 것입니다. 액터 모델은 적어도 Akka에서 구현 된 것처럼 액터라고하는 불완전한 오브젝트를 통해 불변 메시지 (이산 이벤트로 간주 될 수 있음)를 스트리밍하는 것에 관한 것입니다.

표면적으로는 관련이있는 것 같습니다.

그들이 어떻게 관련되어 있는지에 관해 우리는 무엇을 더 말할 수 있습니까? 또한 어떤 애플리케이션 도메인에 더 적합한 지에 대해 무엇을 말할 수 있습니까?

답변:


26

배우 나 FRP 모두 스트리밍에 관한 것이 아닙니다. 액터는 출력 스트림의 외부 구성도 지원하지 않습니다.

FRP는 선형 타임 라인에서 모델링 신호와 이벤트를 특징으로하며, 이는 FRP 동작이 결정적인 방식으로 구성 될 수 있도록합니다. 액터는 결정적이지 않은 순서로 메시지를 처리하는 것이 특징이며, 구성 속성이 거의 없습니다 (즉, 두 액터의 배열을 더 큰 액터로 취급 할 수 없음).

유사성을 찾고 있다면 배우와 FRP는 람다 미적분과 밀접한 관계가 있습니다. 둘 다 인간 입력에 반응하는 시스템을 모델링 할 수 있습니다. 둘 다 내부 (로컬) 상태 모델링을 지원합니다.

FRP는 적분 또는 누산기를 통해 로컬 상태를 지원하고 (시간에 따라 폴드) 액터 모델은 각 액터가 현재 메시지에 대한 다음 액터의 동작을 지정할 수 있도록하여 상태를 지원합니다. 로컬 상태에 대한 이러한 광범위한 지원은 FRP와 Actor 모두 라이브 프로그래밍 (또는 프로그램 코드의 런타임 업그레이드)에 적합하지 않습니다. 중요한 상태를 잃기가 너무 쉽습니다.

응용 프로그램 도메인과 관련하여 :

액터 모델은 런타임시 액터를 설치하거나 유지하려는 개방 시스템에 매우 적합합니다. 메시지의 비 결정적 순서가 적합한 구현을보다 쉽게 ​​만들 수 있기 때문에 액터 모델은 분산 시스템에도 적합하지 않습니다. (액터가 분산 시스템에 더 적합하지 않은 이유는 메시지가 '한 번에 한 번만 도착하는 것'이 혼란에 직면하기가 매우 어려우며, 액터가 분산 GC를 요구하는 경향이 있기 때문입니다.

FRP는 로봇 컨트롤러, 음악 프로그래밍, 전산 장난감과 같이 시간이 지남에 따라 작동하는 폐쇄 시스템에 매우 적합합니다. 결정론과 구성 적 특징은 FRP가 직접 솔루션을 모델링 할 수있는 경우에 FRP를 배우보다 작업하기에 더 편리하게 만듭니다. FRP를 효과와 통합하는 것은 (예를 들어, 불순물로 모델을 해킹하지 않고) 어려운 것으로 입증되었습니다. 최근에는 웜홀 (wormholes)을 통한 효과적인 FRP (효과적이고 독특하거나 선형적인 유형의 리소스 액세스)에 대한 연구가 진행되었습니다.

FRP와 Actors 사이에 다른 모델이 있습니다.

John Paul Morrison이 개발 한 FBP (Flow Based Programming)는 실제로 메시지 스트리밍을 지원합니다.

타임 워프 프로토콜 (또는 LTW (Lightweight Time Warp)에 대한 최신 연구)은 배우와 같은 메시지를 논리적 인 타임 라인에 배치하여 메시지 전달에 대한보다 통제되고 구성적인 개념을 제공합니다. 타임 워프는 종종 과학 컴퓨팅과 같은 대규모 병렬 및 분산 시스템에 사용됩니다. 원래 타임 워프는 대화 형 시뮬레이션 (인간의 입력에 대한 반응)에 적합하지 않았으며 LTW는 거의 적합하지 않습니다.

개방형 및 분산 시스템에서 신호의 반응 형, 구성 형, FRP 형 조작 및 처리를 가능하게하고 로컬 상태를 제거하는 RDP (Reactive Demand Programming)를 개발 중입니다. RDP는 부작용을 시간이 지남에 따라 신호에 의해 자원 상태에 대한 정류적이고 dem 등한 영향으로 제한함으로써 달성됩니다. RDP는 자원 및 상태 모델을 재고해야합니다.


FRP가 마음에 들지 않는 한 가지는 이벤트를 통해 함수를 매핑하는 데 시간이 오래 걸리지 만 FRP는 결과 이벤트가 원래 이벤트와 동시에 발생한 것으로 간주한다는 것입니다. 이로 인해 FRP의 내부 시간 개념이 벽면 시간을 벗어나도록 할 수 있으며 특히 벽면 시간과 관련하여 이벤트가 잘못 정렬 될 수 있습니다. 나는 또한 사건 B가 사건 A 이후에 일어날 수 있다는 허구를 좋아하지 않지만 사건 A와 같은 내부 기록 시간에 픽션을 좋아한다.
Robin Green

1
@RobinGreen '순간적'진행 또는 이벤트 변환을 모델링하는 기능은 매우 유용합니다. 개발자는 업스트림 또는 다운 스트림의 지연을 모델링하여 자유롭게 보상 할 수 있습니다. 종속 또는 선형 유형을 사용하면 임시 시스템에서 모델링하기 어려운 FRP 시스템에 대한 시간 안전 개념 (실시간 속성, 자원으로 대기 시간 할당)을 개발할 수 있습니다.
dmbarbour 2016 년

@RobinGreen- "이벤트 B가 이벤트 A 이후에 발생할 수 있지만 기록 된 시간에 동일하다는 사실"과 관련하여 순간 또는 초월 시간에 발생하는 이벤트 개념 (lim (x-> 0 +) (T + x))은 '이벤트'추상화의 보편적 오류 중 하나. 이벤트 스트림을 복제, 분할 및 병합 할 때 이벤트 순서는 임의적이고 일관되지 않으며 시간 정보를 쉽게 잃습니다. (cf. Why Not Events )
dmbarbour

RDP 프로젝트를 Awelon 프로젝트로 변형하고 있습니까?
CMCDragonkai

1
Awelon 프로젝트는 RDP 모델 / 패러다임을 많이 사용할 것입니다. OOP와 유사한 방식으로 RDP를 생각하십시오. 프로그래밍 모델은 아키텍처와 언어 디자인에 영향을 주지만 '프로젝트'라고 부르는 것은 아닙니다.
dmbarbour 15.41에

7

실제 관점과 어떻게 다른지 지적하고 싶습니다.

1)이 주체가 메시지 전달 명시되고 설명되며, 다른 관계자에게 메시지를 보낼 불가피 .

예를 들면 다음과 같습니다.

send msg to Actor137.

2) FRP에서 데이터 흐름은 선언적 으로 설명됩니다 .

예를 들면 다음과 같습니다.

Cell134=Cell185+Cell42.

메시지 전달은 FRP 프레임 워크에 의해 처리되며 한 셀에서 액터로 (액터로, 상태를 캡슐화하여) 행동을 다른 셀로 전달하는 방법을 "수동으로"설명 할 필요가 없습니다.

다른 말로:

기능적 반응 형 프로그래밍의 본질 은 선언시 값의 동적 동작을 완전히 지정 하는 것입니다. 따라서 모든 종속성은 Cell134선언 지점에서 정의됩니다.

이은 사실이 아니다 액터 모델. 액터의 행동에 영향을 미치는 액터 A는 액터 A가 정의 된 소스 코드의 동일한 위치에 정의되어 있지 않습니다 .

최근 두 데이터 스트림이 선언적으로 설명되었지만 액터를 사용하여 구현되는 Akka 스트림 사이에 흥미로운 하이브리드가 있음알았습니다 .

또 다른 차이점은 액터가 비동기 인 반면 FRP는 동기적인 경향이 있습니다 (종종 글리치가 없는 경우).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.