网络操作和解析在不同的线程上

时间:2013-08-29 14:38:58

标签: java android multithreading

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

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

  • 这两种类型的操作不能相互阻塞(?)
  • 这两种类型的操作可以放在单独的线程池中并单独调整

CON

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

1 个答案:

答案 0 :(得分:1)

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

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

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