java - 在单独的线程上进行网络操作和解析

标签 java android multithreading

将网络操作拆分到单独的线程上是否有好处?我意识到两者都应该在非 UI 线程上执行;那不是我的问题。网络操作是否应该在网络线程上运行,然后将数据传递给解析线程进行解析?

以下是我看到的一些权衡:

  • 两种类型的操作不能互相阻塞(?)
  • 这两类操作可以放在不同的线程池中,分别调优

反对

  • 上下文切换会带来一些延迟
  • 线程越多,越复杂
  • 流解析变得困难/不可能

最佳答案

您几乎已经自己回答了这个问题。真的不会,除非您正在执行的解析需要很长时间。网络操作几乎总是成为您应用程序的瓶颈,因此请考虑权衡您正在执行的处理是否会占用线程可以从 Internet 下载的宝贵时间。

对于解析需要几微秒到几毫秒的大量应用程序,我看不出用户有什么明显的区别。如果您的解析需要相当长的时间,您可以像您所说的那样创建一个单独的线程来进行解析,并在它们之间创建生产者/消费者关系。这会给您的应用程序增加相当多的复杂性,我认为这是不值得的,除非您执行了某种分析以确定这是一个问题。

确保您没有对您的应用程序进行过早的优化,并且您已经对它进行了概要分析(或确定知道)以确定这是否有必要。 :)

关于java - 在单独的线程上进行网络操作和解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18513970/

相关文章:

android - 如何从时间戳获取日期和时间到不同的 TextView

multithreading - Delphi-多线程端口检查器

java - Selenium 与身份验证弹出窗口交互

java - JScrollPane 内容在滚动时不刷新

java - 排序ArrayList : Comparison method violates its general contract

Android 推送通知未接收/未发送

multithreading - Mac上的OpenGL中的多线程视频渲染显示了严重的闪烁问题

Python线程

java - 尝试从 JFileBrowser 访问文件时出现 NullPointerException

java - 不区分大小写的 RegEx 模式