저는 TPL Dataflow를 사용하여 최적의 아키텍처를 설계하는 최선의 방법을 묻고 싶습니다. 나는 아직 코드를 작성하지 않아서 게시 할 수있는 샘플 코드가 없다. 나는 (자원 봉사를하지 않는 한) 코드를 찾고 있지 않다 중 하나지만 설계에 도움이 많이 주시면 감사하겠습니다 다음과 같이가장 적합한 TPL 데이터 흐름 설계?
요구 사항은 다음과 같습니다
나는 특정 방법으로 서로에 의존하는 3 개 코어 블럭 (datablocks)이있다. Datablock1은 Foo1 유형의 객체를 생성하는 제작자입니다. Datablock2는 Foo1 객체 (Datablock1)를 구독하고 잠재적으로 (특정 Foo1이 아닌 모든 Foo1이 아닌) 잠재적으로 다른 데이터 블록이 소비 할 수 있도록 출력 대기열에 저장하는 Foo2 객체를 생성합니다. Datablock3은 또한 Datablock1에서 Foo1 객체를 사용하고 Datablock2가 Foo2 객체로 변환하여 Foo2 객체로 변환하는 Foo3 객체를 생성 할 수 있습니다. 생산 (FOO2), 소비된다 (FOO1 :
- Datablock1가 : 생산 (FOO1)를 소모한다 (아무것도)
- Datablock2이
은 요약하면, 여기 블럭 (datablocks)과 그들이 각 생산 및 소비 있습니다 Foo3)
- Datablock3는 : 생산 (Foo3) 소모한다 (FOO1)는
추가적인 요건은 동일 FOO1가 Datablock2 및 Datablock3에서 거의 동시에 처리된다는 점이다. Foo1 객체가 Datablock2에 의해 처음 소비되고 나서 Datablock2가 작업을 마치면 동일한 Foo1 객체가 작업을 수행하기 위해 Datablock3에 게시됩니다. Datablock2의 Foo2 객체는 Foo1 객체 나 Foo3 객체에 대한 연산에서 발생할 수 있습니다.
나는 그것이 의미가 있기를 바란다. 아직 불분명하다면 나는 더 설명하기를 기쁘게 생각한다.
첫 번째 아이디어는 3 개의 데이터 블록 각각에 대해 TPL Dataflowblocks를 만들고 다른 개체 유형의 들어오는 스트림을 처리하도록하는 것이 었습니다. 또 다른 아이디어는 데이터 블록을 분할하고 각 데이터 블록이 하나의 단일 객체 유형의 스트림 만 처리하도록하는 것입니다. 당신은 무엇을 권유합니까? 더 좋은 해결책이 있습니까?
Svick은 이미 Datablock1에서 도움을 받았으며 이미 작동 중입니다. 위에서 설명한대로 현재 환경을 TPL Dataflow로 바꾸는 방법에 대해서만 고민하고 있습니다.
모든 아이디어 나 조언을 부탁드립니다.
가장 효율적인 아키텍처를 찾고 있다면 제대로 찾을 수있는 유일한 아키텍처가 있습니다. 어떤 옵션이 실제로 가장 적합한지를 확인하기 위해 다양한 옵션을 측정하십시오. 다른 모든 것은 추측 일뿐입니다. – svick
완전히 동의하지만이 시점에서 데이터 블록이 연결된 다른 ISourceBlock의 객체를 받아들이도록 설정 될 수 있는지 여부는 확실하지 않습니다. 예를 들어 Foo1 및 Foo2 객체와 같이 사용할 수있는 데이터 블록을 작성하는 방법을 알고 있다면 2 개의 개별 입력 대기열에 버퍼링하고 전달 된 함수를 둘 중 하나에서 작동하게하면 몇 가지 테스트 아키텍처를 직접 설정할 수 있습니다. 문제는 현재 TPL Dataflow 문서가 거의 존재하지 않는다는 것입니다. Differentnet 객체를 하나의 Dataflowblock으로 전달하는 여러 제작자를 수락하는 방법을 다루는 방법을 도울 수 있습니까? –
'Foo1'과'Foo3'는 공통 기본 클래스를 공유합니까? 그렇지 않다면 블록 2가 어떻게 둘 다 처리 할 수 있을까요? – svick