【问题标题】:Multiple ports and threading多个端口和线程
【发布时间】:2013-07-31 12:08:47
【问题描述】:

我正在设计 Android 软件,我必须在其中监听 n 个端口,比如说 10 个。每 100 毫秒我想检查端口是否有一个新的 UDP 数据包。收到数据包后,里面的数据应该传递给UI线程。

我的问题是我应该使用一个线程从所有不同的端口接收数据,还是应该为每个端口创建自己的线程,每个线程都以 100 毫秒的间隔运行?在这些情况下,好的做法是什么?

当端口有数据时,它被反序列化为一个对象,然后用于更新UI线程中Views中的数据。

我对套接字编程和更高级的并发编程很陌生,所以我一直在犹豫不决,没有从网上找到任何好的答案。

【问题讨论】:

  • 如果你要每 100 毫秒检查一次,你将不得不使用线程化的定时器
  • 是的,我只是不确定是否应该创建一个定时线程并检查每个端口的内部。
  • 您应该创建用于捕获数据的线程和一个每 100 毫秒检查一次这些线程的计时器
  • 为什么要对 UDP 消息使用定时轮询?为什么不等他们一到就处理呢?
  • 呃,等一下。当我收到一个没有轮询的新数据包时,我总是可以运行代码吗?怎么样?

标签: java android multithreading udp port


【解决方案1】:

每个套接字都有一个线程似乎有点过头了,除非反序列化对象的时间过长,否则您将看不到任何好处。

就个人而言(就像 bas 指出的那样;里面没有太多内容)我会从简单开始,让一个线程循环检查 10 个端口并在检查之间休眠。如果您开始发现线程处理数据花费了太多时间并且每个端口被检查的时间太长,那么您可以在此时向池中添加更多线程。

【讨论】:

  • 谢谢。我认为这可能是我现在要走的路,因为反序列化不应该花费太多时间。
  • 好吧,矫枉过正是错误的词。也许“过度设计”会更贴切。
【解决方案2】:
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 毫秒的定时器间隔,你可以创建一个定时器,循环遍历所有线程并从这些线程中收集数据。确保将其锁定,这样如果在前一个事件仍在忙于收集数据时计时器已过,这两者就不会相互干扰。

【讨论】:

  • 好的,谢谢。我只是想知道通过为每个端口使用单独的线程是否会有什么好处,因为 imo 通常更多线程 = 更复杂,至少在这种情况下是这样。
  • '更多线程 = 更复杂'?您必须在线程创建周围放置一个“0..9”循环。对我来说听起来并不那么复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多