我需要通过java的FTP下载多个文件。为此,我使用FTPClient编写了一段代码,该代码将文件逐个下载。我需要从服务器获取文件并下载到另一个网络。在编写了代码之后,我发现下载每个文件需要更多的时间,因为文件大小很大(超过10 as )。我决定多线程进程,即一次运行多个文件。有人能帮我在多线程环境下帮我写FTP吗?尽管我觉得多线程不会有帮助,因为网络的带宽将保持不变,并且将被分配到多个线程中,导致再次缓慢的下载。请建议!!
发布于 2018-07-16 08:06:15
你有不同的东西要先检查:
如果服务器将单个文件的传输速度限制在低于其最大传输速度的阈值范围内,则可以使用多线程(例如,每个连接的传输速度限制为10 Kb/s,最大上传速度为100 Kb/s,理论上可以并行下载10次)。如果不是,多线程不会对你有帮助。
另外,如果您的下载已经饱和(所有的带宽都被单个下载所填充,或者服务器的上传带宽大于您的下载),那么多线程将不会给您带来任何帮助。
如果您的多线程很有用,只需为每个文件实例化一个新连接,并将其抛到一个分离的线程中即可。
发布于 2018-07-16 08:07:26
我觉得多线程不会有帮助,因为网络的带宽将保持不变,将被分配到多个线程中,导致再次缓慢的下载。
这很可能是真的。实际上,如果有太多线程同时下载文件,则可能会使FTP服务器过载或造成网络拥塞。两者都会导致净降低总体数据速率中的。
解决方案是为下载线程使用一个有界线程池,并调整池大小。
在可能的情况下重用连接也是一个好主意,因为创建连接和验证用户需要时间.和两端的CPU资源。
https://stackoverflow.com/questions/51357007
复制相似问题