다른 유형의 out-of-process 메시지를받는 알고리즘을 실행합니다. 들어오는 메시지는 실제로 바이트 배열이고 각 바이트 배열은 메시지 유형을 나타내는 바이트 배열 플래그에 의해 미리 보류됩니다. 들어오는 바이트 배열을 처리하는 IPropagator<byte[], byte[]>
을 설정하고 바이트 배열 플래그를 해석 한 다음 바이트 배열을 연결된 해당 ActionBlock에 스트리밍하도록 설정할 수 있는지를 알고 싶습니다.TPL 데이터 흐름 메시지 유형 할당 패턴이 가능합니까?
예를 들어, 내가 2 개의 다른 메시지 유형을 갖고 있고, 2 개의 서로 다른 ActionBlocks가 수신해야하는 메시지 유형과 일치하는 메시지 만 수신한다고 가정 해 보겠습니다. 두 액션 블록에 IPropagatorBlock을 연결하면 둘 다 ActionBlocks가 같은 메시지를 받겠습니까? 플래그에 따라 각 메시지를 올바르게 할당하려면 어떻게해야합니까 (플래그에 대해 걱정할 필요가 없습니다. 식별은 쉽지 않습니다. 언제든지 ActionBlock IPropgatorBlock이 메시지를 스트리밍하려고합니다). 데이터 흐름 구조를 올바르게 설정하는 데 어려움을 겪고 있습니다. Post()하는 대신 데이터 블록을 서로 직접 연결할 수 있기를 바랍니다. 그게 가능하니?
그 점에 대해 도움을 주시면 감사하겠습니다.
필자는 직접 테스트 할 것이지만 프리디 케이트/필터를 사용하는 방법이 변환 블록 내에서 수동으로 할당을 수행 한 다음 플래그가 무엇인지에 따라 단순히 Actionblocks에 게시하는 것이 얼마나 빠른지 알 수 있습니다. (분명히 변환 블록이 필요하지 않지만 다른 액션 블럭에 게시하는 액션 블럭이 될 것입니다. 분명히 가장 좋은 방법은 아니지만, 술어를 사용하는 것보다 빠르거나 느릴 것이라고 생각합니까? –
저는 술어를 사용하면 성능이 매우 낮을 것이라고 생각합니다. 당신은 많은 표적을 가지고 있습니다, 그리고 나서 정확한 표적에 대한 선형 탐색은 문제가 될 수 있습니다. 그러나 그것은 당신의 경우가 아닙니다. – svick
나는 그것을 시험해 보았습니다 : 매끈한 해결책과 매우 빠릅니다. ZeroMQ를 메시징 시스템으로 사용하여 들어오는 메시지가 있기 때문에 질문을합니다. 하나만 들어오는 소켓이 있고 처리를 위해 각 메시지 블록을 각각의 작업 블록에 할당하거나 각 메시지 유형에 대한 소켓을 설정하고 많은 메시지를 작성해야합니다. 이벤트 처리기를 작성하고 이벤트를 다른 클래스에 전달하는 코드. 어쨌든 동시에 처리하기 때문에이 접근 방식을 사용하는 것이 좋습니다. –