【问题标题】:Do something while waiting in input stream在输入流中等待时做一些事情
【发布时间】:2014-10-17 18:00:08
【问题描述】:

我正在将字节从输入流传输到文件通道。由于处理器和文件 io 比网络快很多倍,因此很明显线程在传输数据时会暂停很多时间。是否可以实现下载文件的流水线概念,以便在每次暂停之间线程处理下一个获取请求所以单个线程正在处理多个获取请求?这是我的简单实现:

while (start < end && currentState.get() == 1) {
      delta = fileChannel.transferFrom(inputChannel, start, 8192);
      start += delta;
      }

欢迎任何其他提高速度的想法。

【问题讨论】:

  • 你需要看NIO。已经有异步 IO 的技术。
  • 您是否意识到,如果您同时下载两个文件,它们的下载速度可能都减半?
  • 使用Future,在等待价值的同时做有用的事情。

标签: java multithreading apache-httpclient-4.x pipelining


【解决方案1】:

有两种方法:

  1. 将您的代码完全重写为面向事件的范例(最好的办法是为此使用 Netty);

  2. 利用 Java 对多线程的出色支持。在这种情况下,您可以保留大部分阻塞 I/O 代码。

【讨论】:

    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 2021-09-15
    • 2020-02-15
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多