2013-04-09 1 views
1

Java 스레딩과 관련하여 질문이 있습니다.다중 사용자를 위해 Java에서 다중 분기 폴링 스레드를 구현하는 방법은 무엇입니까?

  • 2 다른 사람들이 자신의 휴대 전화에 multiquestion 여론 조사를 받게됩니다 : 이건 내 시나리오입니다.
  • 질문을 보내면 응답을받을 때까지 서버는 대기() 상태로 유지됩니다. 그런 다음 모든 질문이 전송 될 때까지 알림() 신호가 폴링을 위해 계속 전송됩니다.
  • 사용자 1가 응답 할 수 질문 3 사용자 2 여전히 대답한다 질문 동안 1
내 접근 방식은 지금까지 새로운 ChainedPollThread을 구현하는 것이 었습니다

실. 어쨌든, 이렇게하면 사용자 1이 질문 1에 대답하는 경우 사용자 1과 2 모두 두 번째 질문을 받게됩니다.

각 사용자에 대해 ChainedPollThread을 새로 만들어야합니까?

사용자 수가 증가하면 예를 들어 100 개의 스레드를 만들어야합니까?

내가 달성하고자하는 것을 구현하는 적절한 방법은 무엇입니까? 사전에

감사합니다.

답변

1

멀티 스레딩 방법은 각 참가자마다 하나의 스레드가 필요하다는 것입니다.

이렇게 구현 한 방법은 이제 한 사람이 질문에 답하는 즉시 서버 쪽 프로그램의 전체 상태가 두 번째 질문으로 넘어갑니다. 참가자들 각각에 대해 하나의 스레드 (따라서, 설문 조사 프로그램의 경우 하나의 설문 프로그램)가 있으면 문제가 해결됩니다.

불필요한 스레드 때문에 서버 부하를 줄이려면 스레드 풀링을 사용하십시오 (http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html 참조). 스레드 풀은 더 이상 필요하지 않으면 기존 스레드를 다시 사용하므로 활성 스레드의 크기를 최소한으로 유지하려고합니다. (쓰레드를 생성하는 것은 값 비싼 부분입니다.) 더 많은 것이 필요하면 풀이 지정된 최대 값까지 증가합니다. 필요 이상으로 작아지면 지정된 최소값까지 줄어 듭니다.

반면에 전체 모델에는 몇 가지 위험이 있습니다. 사람이 전혀 응답하지 않으면 어떻게됩니까? 서버에 시간 초과가 있습니까? 영원히 기다릴 수 있을까요?

하나의 옵션은 모바일 장치에 소프트웨어/프레임 워크를 설치하는 것입니다.이 소프트웨어/프레임 워크는 설문에 대한 모든 질문과 가능한 대답을 받아서 화면에 차례대로 제시 할 수 있습니다. 참가자가 "마침"을 누르면 마침내 선택한 답안 세트가 반송됩니다. 이렇게하면 서버가 각 참가자에게 스레드를 보유 할 필요가 없으며 모든 대답이있는 문자열 하나만 수신하게됩니다.

+0

Simon에게 감사드립니다. 교착 상태를 막기위한 타임 아웃이 이미 구현되어 있으므로 문제는 없습니다.유일한 문제는 내 "휴대 전화"가 실제로 휴대 전화가 아니라는 것입니다 (제 질문을 단순화하기 위해 말한 것입니다). 질문을받는 장치는 저장 용량이 매우 낮으므로 이러한 큰 데이터를 처리 할 수 ​​없습니다. 스레드 풀링 또는 세마포어가 내 대답 일 것입니다. 정보에 대한 큰 감사. –

+1

아, 세마포어, 그 생각하지 않았다 :) –