2014-10-31 3 views
0

메모리 내 FIFO Java 대기열을 사용하는 응용 프로그램이 다른 스레드와 병렬로 실행되는 (예 : ThreadPool의 일부로 스레드에서 처리 될 객체를 배치하는 경우를 고려하십시오.).Java 대기열에서 다중 스레드 처리

각 개체는 "호환 가능한"스레드로 처리되어야하며 개체와 관련된 레이블을 확인하여 호환성이 보장됩니다. 즉, 각 스레드는 모든 유형이 아닌 특정 유형의 개체를 처리 할 수 ​​있습니다. 쓰레드가 큐에서 객체를 읽고 그것이 읽는 레이블이 그것이 지원하는 것들 중 하나가 아니라면 객체를 무시해야한다. (즉, 동일한 레이블 모든 개체들이 대기열에 증착되는 순서로 처리되어야한다)

  1. - 오더 처리 :

    일부 추가 특성 응용 프로그램 수행한다.

  2. 고성능 (즉, 초당 수천 개의 "무거운"개체를 처리 할 수 ​​있음). earlier question에 제안

하나는 ConcurrentLinkedQueue 사용할 수 있지만 하나의 큐는 라벨에 따라 입력을 분리하는 대한 까다로운 일을한다. 또는 각 스레드는 단일 레이블을 처리하도록 할당 될 수 있으므로 자체 비 동시성 대기열을 가질 수 있습니다. 또는 다른 접근법을 따라야합니다.

위의 사양을 구현하는 가장 좋은 방법은 무엇입니까?

+1

몇 가지 방법으로 접근 할 수 있다고 생각합니다. 1) 레이블 당 동시 대기열이 있습니다. 2) 중간 정렬 소비자가 있습니다. 3) [JMS] (http://en.wikipedia.org/wiki/Java_Message_Service)를 메시징에 사용하십시오. 이 문제는 게시/구독 문제와 비슷합니다. – mkobit

+0

게시/구독 문제이지만 성능상의 이유로 "간단한"메모리 내 큐만 사용하려고합니다. 레이블 당 동시 큐가 아마도 최상의 솔루션 일 것입니다. 고마워 +1. :-) – PNS

답변

1

스레드가 큐에서 개체를 읽고 해당 스레드가 지원하는 레이블에 포함되어 있지 않으면 해당 개체를 무시해야합니다.

대기열에 들어가는 작업 중 일부가 수행되지 않는다는 의미입니까? 그리고 어떤 것들이 무시 될 것이며 어떤 것들이 처리 될지 예측할 수있는 방법이 없다는 뜻입니까?

아주 좋은 디자인 같지 않습니다.

이것이 의미하는 바가 아니라면 "무시 된"단어가 올바른 단어가 아닐 수 있습니다.

각 객체는 "호환"스레드에 의해 처리되어야합니다 ... 같은 레이블이있는 모든 개체가 그들은 내가 않을거야 큐

에 입금 순서대로 처리해야 다른 종류의 작업자 스레드에 대해 다른 점이 무엇인지 추측 해보십시오.하지만이 요구 사항을 받으면 다른 종류의 작업자마다 다른 스레드 풀이 생깁니다.그런 다음 작업을 생성하여 올바른 대기열에 넣어야합니다.

+0

같은 범주에 속한 개체에 대해 순서가 맞춰져야하기 때문에 개체 범주 당 하나의 스레드 여야합니다. 고마워 +1. :-) – PNS

1

왜 스레드 은 객체의 레이블에 따라 작업을 거절하겠습니까?

대기열에서 작업을 선택하는 스레드는 작업자 스레드처럼 작동해야합니다. 스레드가 큐에서 개체 (또는 작업)를 가져 와서 해당 레이블을 읽고 해당 레이블을 기반으로 처리하는 방식으로 설계/작성해야합니다.

개체 유형스레드 유형 사이에 어떤 서신도 있어서는 안됩니다. 각 스레드는 모든 객체를 처리하도록 작성되어야합니다.

+0

모든 스레드는 레이블로 표현되는 각 객체의 "범주"와 관련된 특수 처리를 수행합니다. 모든 스레드는 모든 범주의 객체를 처리 할 수 ​​없으며 매번 다시 인스턴스화하지 않아도 각 스레드에서 처리 논리를 재사용하는 것이 좋습니다. 그 외에도, 근로자 모델은 물론 적용 가능합니다. – PNS

+0

내 질문에 각 카테고리에 대한 스레드 유형이 필요합니다. 특수화 된 처리 논리는 실행 가능 태스크 객체에 있어야하며 모든 스레드에서 호출/실행할 수 있습니다. 재 초기화를 저장하려면 이러한 객체의 싱글 톤 패턴을 사용하는 것이 좋습니다. 처리가 상태 저장이고 필드에 상태를 저장해야하는 경우, 특수화 된 타스크 실 행자 오브젝트의 풀 사용에 대해 생각해보십시오. –

+0

스레드를 처리하는 스레드가 둘 이상인 경우 각 범주의 개체를 순서대로 처리하는 것을 보장 할 수 없습니다. +1 토론. :-) – PNS