我需要在Java中通过FTP下载多个文件。为此,我使用FTPClient编写了一个代码,该代码一个接一个地下载文件。 我需要从服务器获取文件并下载到另一个网络。编写代码后,我发现下载文件需要花费更多时间,因为文件大小很大(超过10GB)。我决定对程序进行多线程处理,即一次运行多个文件。有人可以帮我在多线程环境中写FTP吗? 尽管我觉得多线程无济于事,因为网络带宽会保持不变,并且会在多个线程之间分配,导致再次缓慢下载。请提出建议!
答案 0 :(得分:1)
您需要先检查其他内容:
如果服务器将单个文件的传输速度限制为低于最大传输速度的阈值,则使用多线程可以具有一些优势(例如,每个连接的限制为10 Kb / s,最大上传速度为100 Kb / s,理论上您可以并行下载10次)。如果没有,多线程将无济于事。
如果您的下载已达到饱和(所有带宽都被单个下载填充,或者服务器的上传带宽大于您的下载),那么多线程将无法提供任何帮助。
如果多线程很有用,只需为每个文件实例化一个新连接,然后将其放入单独的线程中即可。
答案 1 :(得分:0)
我觉得多线程无济于事,因为网络带宽将保持不变,并且会在多个线程之间分配,导致再次缓慢下载。
那很可能是真的。的确,如果您有太多线程试图同时下载文件,则很可能会使FTP服务器超载或导致网络拥塞。两者都会导致总体数据传输率净降低。
解决方案是对下载线程使用受限线程池,并调整池的大小。
在可能的情况下重用连接也是一个好主意,因为创建连接并验证用户的身份会花费时间...并且两端的CPU资源也是如此。