저는 현재 .NET 용 Reactive Extensions 프레임 워크를 이해하고 있으며 제가 찾은 다양한 소개 리소스 (주로 http://www.introtorx.com )를 통해 작업하고 있습니다.
우리의 응용 프로그램에는 네트워크 프레임을 감지하는 여러 하드웨어 인터페이스가 포함됩니다. 이러한 인터페이스는 내 IObservable이됩니다. 그런 다음 이러한 프레임을 사용하거나 데이터에 대해 어떤 방식으로 변환을 수행하고 새로운 유형의 프레임을 생성하는 다양한 구성 요소를 갖게됩니다. 예를 들어 매 n 번째 프레임을 표시해야하는 다른 구성 요소도 있습니다. Rx가 우리 애플리케이션에 유용 할 것이라고 확신하지만 IObserver 인터페이스에 대한 구현 세부 사항에 어려움을 겪고 있습니다.
내가 읽은 대부분의 (모두는 아니지만) 리소스는 IObservable 인터페이스를 직접 구현하지 말고 제공된 함수 또는 클래스 중 하나를 사용해야한다고 말했습니다. 내 연구에 따르면를 생성하면 필요한 Subject<IBaseFrame>
것을 제공 할 수 있는 것으로 나타났습니다 . 하드웨어 인터페이스에서 데이터를 읽은 다음 Subject<IBaseFrame>
인스턴스 의 OnNext 함수를 호출하는 단일 스레드를 갖게 됩니다. 그러면 다른 IObserver 구성 요소가 해당 주제로부터 알림을받습니다.
내 혼란은 이 튜토리얼 의 부록에있는 조언에서 비롯됩니다 .
주제 유형을 사용하지 마십시오. Rx는 효과적으로 함수형 프로그래밍 패러다임입니다. 주체를 사용한다는 것은 잠재적으로 변경 될 수있는 상태를 관리하고 있음을 의미합니다. 변경 상태와 비동기 프로그래밍을 동시에 처리하는 것은 제대로하기가 매우 어렵습니다. 또한 많은 연산자 (확장 메서드)는 구독 및 시퀀스의 정확하고 일관된 수명이 유지되도록주의 깊게 작성되었습니다. 주제를 소개 할 때 이것을 깨뜨릴 수 있습니다. 주제를 명시 적으로 사용하는 경우 향후 릴리스에서도 상당한 성능 저하가 발생할 수 있습니다.
내 애플리케이션은 성능이 매우 중요합니다. 프로덕션 코드에 들어가기 전에 Rx 패턴을 사용하여 성능을 테스트 할 것입니다. 그러나 저는 Subject 클래스를 사용하여 Rx 프레임 워크의 정신에 위배되는 작업을하고 있으며 프레임 워크의 향후 버전이 성능을 저하시킬 것이라고 걱정합니다.
내가 원하는 일을하는 더 좋은 방법이 있습니까? 관찰자가 있든 없든 하드웨어 폴링 스레드는 지속적으로 실행될 것이므로 (그렇지 않으면 HW 버퍼가 백업 할 것임) 이것은 매우 핫한 시퀀스입니다. 그런 다음 수신 된 프레임을 여러 관찰자에게 전달해야합니다.
어떤 조언이라도 대단히 감사하겠습니다.