2013-07-31 36 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'循环。对我来说听起来并不复杂。 –