2012-02-28 10 views
3

주제에 대한 검색 요청을 수신하고 New York Times API에 대한 API 호출을 통해 주제와 관련된 기사를 가져온 다음 Twitter API로 가져 오는 프로그램을 작성 중입니다. 기사를 언급 한 짹짹을 가져 와서 결과를 처리하고 다시 반환합니다.다중 스레드 REST API 클라이언트 용 디자인

나는 이것을 멀티 스레드로 만들어야한다. ExecutorService를 고정 크기 스레드 풀과 함께 사용하려고 생각했습니다. 따라서 들어오는 모든 검색 요청은 별도의 스레드에 의해 처리됩니다. 또한 Callable 인터페이스를 사용하여 작업을 제출합니다. 호출 가능 기능을 구현하는 클래스는 API 처리 (API 요청/응답 수신 &)를 수행합니다. 마지막으로 결과가 Future에 의해 반입되고 출력으로 표시됩니다. 이는 들어오는 모든 요청에 ​​대해 발생합니다.

의미가 있습니까? 아니면 이것을 할 수있는 더 좋은 방법이 있습니까?

편집 : 명령 줄 인터페이스에서 데이터를 받아들이는 로컬 컴퓨터에서 실행 중입니다.

+0

어떤 서버 응용 프로그램입니까? –

답변

5

웹 응용 프로그램 인 경우 기본적으로 멀티 스레드입니다. 그렇지 않은 경우 - 여전히 서블릿 컨테이너에 배포 할 수 있다면 이점이 있습니다. 스레드 풀은 기본 컨테이너 (예 : tomcat)에 의해 제공됩니다. 각 요청은 별도의 스레드에 의해 처리됩니다.

+0

이것은 웹 응용 프로그램이 아닙니다. CLI에서 데이터를 받아들이는 로컬 컴퓨터에서 실행 중입니다. 하지만 여전히 멀티 스레드로 만들고 싶습니다. – gofeddy

+1

서블릿 컨테이너에서 실행하지 않는 이유는 무엇입니까? – Bozho

+0

나는이 옵션을 결국 고려할 것입니다. 그 전에는 java.util.concurrent 기능 세트를 통해 구현 된 것을 얻을 수 있는지 확인하려고했습니다. – gofeddy

2

를 사용 synchronized

  • 정리 어떤 ThreadLocal 변수를 사용하지 않는 내가 워크 플로가 올바른 받고, 다음을 참조 프로파일에 초점을 맞출 것이다 : 대한

    유일한 일이 걱정하는 병목 현상이있는 곳에서 병행 성 (스레딩! = 동시성 또는 비동기 실행)이 도움이 될 곳을 찾으려고합니다. 실행 스레드가 여러 개인 CPU, 네트워크 또는 디스크 I/O를 포화 시키면 작업 속도가 빨라지 지 않으며 특히 하이퍼 스레딩 된 Intel CPU의 경우 성능이 저하됩니다.

    그런 다음 멀티 스레드로 만들기 전에 비 블로킹 및 비동기로 만드는 것에 대해 더 걱정할 것입니다. 블로킹 작업 (직렬화)은 스레드를 사용하여 동시 작업을 시도 할 경우 얻을 수있는 이점을 완전히 무효화합니다.

    멀티 스레드는 작업이 워크 플로에서 여전히 직렬화되어 있으면 더 빠르고 효율적으로 실행된다는 것을 마법처럼 말하는 것은 아닙니다. 반대로 메시지 전달 및 비동기 작업을 직접 수행하지 않으면 작업 속도가 느려지고 효율성이 떨어질 수 있습니다.

    또한 Core i7 노트북의 상단에서이 프로그램을 실행하는 경우 4 개의 실제 스레드 (CPU 하이퍼 스레드는 일반적으로 CPU 바운드 응용 프로그램의 상태를 악화시킵니다)와 일이 순차적으로 발생하지 않으면 다시 돌려 놓으면 실제 이익을 얻지 못할 수도 있고 복잡해질 수도 있습니다. 더 많은 코어 서버에서이 경우는 그렇지 않을 수도 있습니다. 랩톱에서 스레드를 사용하면 많은 것을 얻을 수 없습니다.

    "동시성을 수행하는 것은 동시성을 수행하면 을 올바르게 수행합니다.은 매우 어렵습니다!" - 내 합기도 선생을 바꿔서

  • +0

    [Node.JS] (http://nodejs.org/)를 사용하면 단순한 비동기식 솔루션에 대한 아이디어가 될지 궁금합니다. – beny23

    +0

    전체적으로별로 중요하지 않습니다. 매번 다른 크기의 스레드 풀을 사용하여 10-15 개의 요청을 보내려고했지만 응답 시간에 개선/변경 사항이 전혀 표시되지 않았습니다. 또한, 지금 당장, 내가 제출 한 Futures를 사용하여 작업을 제출 한 후에 결과를 얻으면이 응용 프로그램이 차단된다는 것을 알 수 있습니다. 내가 비 차단으로 만들 수 있는지 알아보기 위해 살펴볼 것이다. – gofeddy

    +0

    @ Jarrod Roberson : * 4 개의 하이퍼 스레는 일반적으로 CPU 바운드 앱에서 상황을 악화시킵니다. [그리고] * "랩탑에서 스레딩을하면 많은 것을 얻지 못할 것입니다"* [sic] ... 견적, 링크를 많이 환영합니다. 두 번째 견적과 관련하여 필자는 정확한 반대를 반복적으로 목격했다. 데이터를 처리하기 위해 * 생산자/소비자 * 계획을 사용하면 소비자 스레드 수를 CPU 수에 맞게 조정할 때 더 나은 처리량을 얻을 수있다 (이전의 Core 2 Duo 예를 들어 Mac 랩톱). 멀티 코어 CPU의 현재와 현재 시대에 싱글 스레드 프로듀서/소비자를 정말로지지하십니까? – TacticalCoder