2013-07-05 4 views
1

실시간 데이터로 끊임없이 전달되는 방법이 있습니다. 성능 향상을 위해 스레드 내부 전체 방법 본체를 넣어 어떤 이점이있다,실시간 메시지 처리 방법 본문이 별도 스레드에

void processMessage(String messageBeingPassed) { 
    //evaluate the message here and do something with it 
    //depending on the current state of the message 
    //if message.equals("test") 
    //call separate thread to save to database etc... 
    //etc... 
} 

내 질문은 :

방법은 다음 데이터를 평가?

같은 : 어떤 응답을

void processMessage(String messageBeingPassed) { 
    Runnable runnable = new Runnable() { 
    public void run() { 
    //evaluate the message here and do something 
    //depending on the current state of the message 
    //if message.equals("test") 
    //call separate thread to save to database etc... 
    //etc... 
    } 
    //start main body thread for this current message etc... 
} 
} 

감사합니다.

+1

묻지 마십시오. 법안. * 귀하는 * 코드와 데이터에 대한 액세스 권한이있는 유일한 사람입니다. 그것을 위로 돌려 놓으십시오. 그러면 인터넷에있는 사람들의 추측에 의존하는 대신 * 알 수 있습니다. 응답에 대해 – jason

답변

2

다양한 요인에 따라 달라질 수 있습니다. 이 메소드가 애플리케이션의 병목 지점 인 경우 (즉, 처리 대기중인 메시지 대기열이 길어지는 경우) 특정 시점까지 성능이 향상 될 수 있으며 너무 많은 스레드를 사용하면 성능이 저하 될 수 있습니다. 따라서 스레드 풀을 사용해야하며 4 개의 스레드가 해당 스레드를 처리해야합니다.

그러나 메시지 대기열이 없으면 거의 도움이되지 않습니다.

어느 쪽이든, 확실히 알 수있는 유일한 방법은 당신의 응용 프로그램에서 최고의 수행 어떤 테스트 및 프로파일 링하는 것입니다.

+0

감사합니다. 중요한 성능 향상을 위해 필자가 필요로하지 않는 (필자의 경우) 필자가 생각한 것을 거의 확인하는 몇 가지 테스트를 수행 하겠지만. –

0

장점은 한 번에 여러 메시지를 처리 ​​할 수 ​​있으며 메시지가 처리되는 동안 호출 방법을 차단할 필요가 없다는 것입니다. 즉, 메시지 처리는 동기 대신 비동기 적입니다. 단점은 메소드 디자인에주의하지 않으면 데이터 레이스/데드락 (deadlock)/등등을 열어야한다는 것입니다. 일반적으로 실행 파일이 messageBeingPassed 객체에서만 작동하는 경우 (정적 필드가 아닌 경우) 너 괜찮을거야. 또한 스레드는 일부 오버 헤드를 발생 시키므로 스레드 개체를 직접 구성하는 대신 ExecutorService을 사용하여 줄일 수 있습니다.

+0

주셔서 감사합니다. –

0

"processMessage"가 취하는 데이터 속도 및 시간에 따라 다릅니다. "processMessage"메서드가 이전 데이터의 실행을 완료하기 전에 다음 데이터가 도착하면 "processMessage"메서드 내에서 스레드를 사용하는 것이 좋습니다.

+0

processMessage 메소드의 경우 몇 가지 조건부 검사 만 있으며 조건이 충족되면 특정 상태로 잠그기 때문에 후속 검사가 크게 줄어 듭니다. 그러나 나는 더 이상 성능을 얻을 수 있는지 확실히 테스트 할 것입니다. –