2013-07-31 4 views
2

포트 수를 10 개로 늘릴 수있는 안드로이드 소프트웨어를 설계하고 있습니다. 매 100ms마다 포트에 새로운 UDP 패킷이 있는지 확인하고 싶습니다. 패킷을받은 후에 내부의 데이터는 UI 스레드에 전달되어야합니다.다중 포트 및 스레딩

제 질문은 모든 다른 포트에서 데이터를 받기 위해 하나의 스레드를 사용해야합니까, 아니면 각 포트마다 자신의 스레드를 만들어야하나요? 각 포트는 100ms 간격으로 실행됩니까? 이 경우에 좋은 연습은 무엇입니까?

포트에 데이터가 있으면 개체로 deserialize 된 다음 UI 스레드의 뷰에서 데이터를 업데이트하는 데 사용됩니다.

저는 소켓 프로그래밍과 고급 프로그래밍이 새로 도입되어 웹에서 좋은 답변을 찾지 못한 채 시간이 지체했습니다.

+0

각 100ms를 확인하려면 아무 래도 스레드 된 타이머를 사용해야합니다. – bas

+0

그래, 시간이 초과 된 스레드를 만들고 각 포트를 검사해야하는지 잘 모르겠습니다. – Tumetsu

+0

데이터 캡처 용 스레드와 해당 스레드를 확인하는 타이머를 각각 100ms마다 생성해야합니다. – bas

답변

1

소켓 당 스레드를 갖는 것은 과도한 것처럼 보이며 개체를 비 직렬화 할 시간이 지나치지 않으면 어떤 이점도 보이지 않습니다.

개인적으로 (그리고 기본적으로 지적한 바와 같이, 그다지 많지 않습니다.) 저는 간단하게 시작해서 10 개의 포트를 검사하고 수표 사이에서 잠을 자고있었습니다. 스레드가 데이터 처리에 너무 많은 시간을 들여서 검사되는 각 포트 사이의 시간이 너무 길다는 것을 알기 시작하면 그 시점에서 풀에 더 많은 스레드를 추가 할 수 있습니다.

+0

감사합니다. deserialization이 너무 많은 시간을 들여서는 안되기 때문에 지금 갈 방법이라고 생각합니다. – Tumetsu

+0

무엇? 10 개의 스레드가 잔인합니까? –

+0

좋아요, 잔인한 말은 잘못된 것입니다. 어쩌면 "오버 엔지니어링"이 더 적절할 수도 있습니다. – StuPointerException

1
My question is should I use one thread to receive data from all different ports or 
should I create own thread for every port, each timed to run at 100ms interval? 
What is the good practice in these cases? 

별로 중요하지 않습니다. 스레드를 하나 만들면 다른 포트를 추적해야합니다. 여러 스레드를 작성하는 경우 이러한 모든 스레드를 추적해야합니다. cpu는 보통 멀티 쓰레드이기 때문에 다중 쓰레드를 사용할 것입니다.

100ms 타이머 간격과 관련하여 모든 스레드를 반복하고 이러한 스레드에서 데이터를 수집하는 하나의 타이머를 만들 수 있습니다. 이전 이벤트가 여전히 데이터 수집 중일 때 타이머가 경과하면이 두 이벤트가 서로 방해하지 않도록 잠그십시오.

+0

알겠습니다. 고마워요. 각 포트마다 별도의 스레드를 사용하여 우위를 점할 수 있을지 궁금한 점이 있습니다.이 경우 일반적으로 스레드 수가 많을수록 복잡성이 커집니다. – Tumetsu

+0

'more threads = more complexity'? 쓰레드 라운드를 위해 '0..9'루프를 넣어야합니다. 그게 내게 복잡한 모든 소리하지 않습니다. –