2013-07-15 2 views
0

변환 순서 t0, t1, ..., tn을 적용하여 으로 input을 구문 분석하려고합니다.Java 병렬 처리가 적용된 연결 필터

input -> t0 -> t1 -> ... -> tn -> output

변형에 일부가 병렬되어야이 병목 현상 방지 : 실행은 체인 것이다.

Java에서 이러한 프로세스 체인을 생성하기위한 프레임 워크가 있습니까? 은 내가 수동으로 할 수있는 방법을 알고있다 (예를 들어 Queuing jobs in a processing chain in Java)하지만 난 특별히

  • 캐시, 대기와 이상 (부분적으로) 멀티 스레드 체인의 복잡성 때문에, 프레임 워크를 찾고 있어요 ... 빨리 될 수 있습니다 복잡한
  • 나는 여러 같은 체인을 가지고 있고 나는 fork/join framework (JDK 7에) 당신이 찾고있는 것을 믿을 표준 라이브러리

답변

1

이러한 변형 체인을 표현하는 많은 다른 실행 모델이 있습니다. 변환은 입력 대기열에서 루프를 읽는 스레드 또는 각 수신 메시지 (스레드에서 숨겨진 스레드 및 루프)를 처리하는 메소드가있는 객체가 될 수 있습니다. 변환은 단일 입력 또는 여러 입력을 가질 수 있습니다. 그것의 후계자를 알고 그 결과를 직접 보내거나 메서드에서 값을 반환 할 수 있으며 별도로 설명 된 토폴로지가 메시지 라우팅을 처리합니다. 변환 작업이 시작될 때 결과를 저장하기위한 공간의 가용성이 고려 될 수도 있고 그렇지 않을 수도 있습니다. 변환 행위는 매우 짧을 수 있으므로 메시지 전달에 대한 오버 헤드가 중요하며 메시지 전달을 신중하게 최적화해야합니다 (Disruptor 참조). 그렇지 않으면 각 메시지에 대한 래퍼 객체를 생성하는 일반적인 연결 대기열로 충분합니다.

귀하의 요구 사항을 모른 채 조언을하는 것은 어렵습니다. 어떤 모델과 구현이 있는지 찾아보고 자신의 사례에 가장 적합한 것을 찾아야합니다. 세부 사항을 모른 채 과 같은 조언은 "프레임 워크 XYZ는 사용자가 찾고있는 것으로 믿습니다."은 XYZ 이외의 다른 프레임 워크를 거의 모르는 사람으로 조언자를 설명합니다. 그럼에도 불구하고 모델이 충분히 도달하는 Dataflow Framework for Java을 보도록 권하고 싶습니다 (예 : 실행 노드가 차단되지 않을 수도 있음).

1

에 적용 할 수있는 무엇을 개혁하지 않도록합니다. 사용 가능한 자원에 따라 작업 종속성을 지정하고 작업을 더 많은 병렬 청크로 분할 할 수 있습니다.

1

Alexei가 조언에 대해 말한대로, 구매자가 조심하도록하십시오. 나는 필터를 지원하는 SourceForge에서 Fork/Join 프레임 워크를 유지하고 있습니다. 코드는 무료이며 오픈 소스이므로 그대로 사용하거나 원하는대로 할 수 있습니다. TymeacDSE

관련 문제