通过java中的FTP异步下载文件



我需要用java通过FTP下载多个文件。为此,我使用FTPClient编写了一段代码,它正在逐个下载文件。我需要从服务器上获取文件并下载到另一个网络。在我编写代码后,我发现下载每个文件需要更多的时间,因为文件大小很大(超过10GB(。我决定对进程进行多线程处理,即一次运行多个文件。有人能帮我在多线程环境中编写FTP吗。尽管我觉得多线程不会有帮助,因为网络的带宽将保持不变,并将在多个线程之间划分,导致下载速度再次变慢。请建议!!

您需要首先检查不同的东西:

  • 您的下载速度
  • 远程服务器的上传速度
  • 每个连接的最大服务器上载速度

如果服务器将单个文件的传输速度限制在低于其最大传输速度的阈值,则可以通过使用多线程来获得一些优势(例如,每次连接的传输速度上限为10 Kb/s,最大上传速度为100 Kb/s,理论上可以并行下载10次(。否则,多线程将不会对您有所帮助。

此外,如果您的下载饱和(所有带宽都被一次下载填满,或者服务器的上传带宽大于您的下载(,您将无法通过多线程获得任何帮助。

如果多线程很有用,只需为每个文件实例化一个新的连接,并将其放入一个单独的线程中。

我觉得多线程不会有帮助,因为网络的带宽将保持不变,并将在多个线程之间划分,导致下载速度再次减慢。

这很可能是真的。事实上,如果有太多线程试图同时下载文件,则可能会使FTP服务器过载或导致网络拥塞。两者都会导致总体数据速率的净下降。

解决方案是为下载线程使用有界线程池,并调整池大小。

在可能的情况下重用连接也是一个好主意,因为创建连接和验证用户需要时间。。。以及两端的CPU资源。

最新更新