2013-07-31 67 views
2

我正在設計Android軟件,我必須收聽n個端口的數量,可以說10個。每100ms我想檢查一下端口是否有新的UDP數據包。收到數據包後,裏面的數據應該傳遞給UI線程。多個端口和線程

我的問題是我應該使用一個線程接收來自所有不同端口的數據,還是應該爲每個端口創建自己的線程,每次都以100ms間隔運行?這些情況下的良好做法是什麼?

當端口有數據時,它被反序列化爲一個對象,然後用它在UI線程中更新視圖中的數據。

我對套接字編程和更高級的併發編程頗爲陌生,所以我一直在猶豫,這段時間沒有從網上找到任何好的答案。

+0

如果你要檢查每個100ms,你將不得不使用定時器,無論如何 – bas

+0

是的,我只是不知道我是否應該創建一個定時線程並檢查每個端口。 – Tumetsu

+0

您應該創建捕獲數據的線程和一個每100ms檢查這些線程的計時器 – bas

回答

1

每個套接字有一個線程似乎是矯枉過正,除非反序列化對象的時間過長,否則你不會看到任何好處。

個人(和bas指出的一樣;其中沒有太多內容)我會從簡單的開始,並有一個單線程檢查10個端口循環和檢查之間的睡眠。如果您開始發現線程處理數據需要太多時間,並且每個被檢查端口之間的時間太長,那麼您可以在該點添加更多線程到池中。

+0

謝謝。我認爲這可能是我現在要走的路,因爲反序列化不應該花費太多時間。 – 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通常是多線程的,我會選擇多線程。

至於100毫秒的定時器時間間隔,您可以創建一個循環遍歷所有線程並從這些線程收集數據的定時器。確保你鎖定它,這樣如果在前一個事件仍然忙於收集數據的時候計時器過去了,這兩個就不會相互干擾。

+0

好的,謝謝。我只是想知道是否有任何事情可以通過爲每個端口使用單獨的線程來獲勝,因爲通常情況下更多的線程更復雜,至少在這種情況下。 – Tumetsu

+0

'更多線程=更復雜'?你必須爲線程創建一個'0..9'循環。對我來說聽起來並不複雜。 –