2012-11-05 3 views
15

저는 Reactor 패턴 (동시)을 저지하려고 노력하고 있지만, 많은 예에서 '작업자 스레드'에 대해 이야기하고 있습니다. 작업자 스레드 란 무엇입니까? 그들은 '정상적인'쓰레드와 다른 점은 무엇입니까? 그리고 원자로 패턴에서의 역할은 무엇입니까?작업자 스레드 란 무엇이며 원자로 패턴에서의 역할은 무엇입니까?

+3

당신이 말하는 참고 문헌에 대한 링크를 제공해주십시오. – Gray

+0

http://en.wikipedia.org/wiki/Reactor_pattern – Jon

+0

해당 사이트의 "작업자 스레드"에 대해서는 아무 것도 없습니다. – Gray

답변

25

Reactor pattern은 응용 프로그램에서 일반적인 시나리오를 극복하기 위해 작업자 스레드와 함께 사용됩니다. 결국에는 많은 작업을해야하지만 스레드 및 작성시기가 많은 작업은 비용이 많이 드는 작업인지 알 수 없습니다.

아이디어는 처음에는 아무 것도하지 않는 많은 스레드를 만드는 것입니다. 대신, 그들은 "일을 기다린다". 작업이 코드 형태로 도착하면 어떤 종류의 Executor 서비스 (반응기)가 풀에서 유휴 스레드를 식별하여 작업을 할당합니다.

그런 식으로 가격을 지불하면 모든 스레드를 한 번만 작성할 수 있습니다 (일부 작업을 완료해야 할 때가 아닌). 동시에 스레드는 일반적인 스레드입니다. 그들은 특정한 일을하도록 전문화되는 대신에 그들에게 배정 된 모든 일을 할 것입니다.

구현의 경우 thread pools을 확인하십시오.

+2

좋은 답변입니다. 나는 원자로 패턴을 알지 못했다. –

+0

위대한 설명, 이것은 정말로 도움이됩니다. – Jon

14

나는 당신이 뭔가 like this documentation on thread-pools 얘기 가정 작업자 스레드 구성 java.util.concurrent의 사용 스레드 풀에서 실행 프로그램 구현의 대부분

. 이 종류의 스레드는 실행되는 Runnable 및 Callable 태스크와 별도로 존재하며 여러 태스크를 실행하는 데 자주 사용됩니다.

작업자 스레드는 일반 스레드하지만 그들은 작업하고 Runnable 또는 Callable 클래스에서 별도 존재한다. Thread을 확장하거나 인수를 사용하여 Thread을 생성하면이 작업은 Thread 개체에 직접 연결됩니다.

당신이 Executors.newFixedThreadPool(10); (또는 다른 유사한 방법)을 사용하여 스레드 풀을 만들

, 당신은 풀에 제출 된 다른 Runnable 또는 Callable 클래스의 수를 실행할 수 10 개 스레드 풀을 만들 수 있습니다. 커버 아래에는 포장 된 방식으로 인해 여전히 더 유연한 Thread입니다.

reactor pattern의 측면에서 볼 때 서로 다른 유형의 이벤트가 유사한 핸들러 스레드에 의해 실행됩니다. 스레드는 단일 이벤트 클! 스에 연결되지 않지만 여러 이벤트가 발생할 때마다 실행합니다.

+0

설명 주셔서 감사합니다. Runnable과 Callable 인터페이스의 차이점은 무엇입니까? – Jon

+4

Javadocs @Jon을 살펴보십시오. 'Runnable'은'void run()'메소드를 가지고 있고'Callable '는'T call()'메소드를 가지고 있습니다. 'Callable' 메쏘드를 사용하면 작업자 풀에 제출 한 작업의 값을 반환 할 수 있습니다. – Gray