gpt4 book ai didi

java - 多线程文件传输到 FTP 服务器

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:39 24 4
gpt4 key购买 nike

我正在为备份服务器编写客户端。我的客户安排了一些文件夹进行备份。 (例如:每个星期五的 X 点)。我正在使用 cron4j(Linux cron 到 java 的端口)进行调度。

一切都很好,直到我同时安排多个上传作业,然后由于多个线程,它变得困惑。

谁能帮我解决多线程上传到 ftp 服务器的问题?(每个线程都有上传一个目录到Ftp服务器的工作)。

最佳答案

当您说它变得有点“困惑”时,您能解释一下您的意思吗?有什么特别的症状吗?

无论如何从一张干净的纸上看这个我会说你想限制你一次执行的并发上传的数量,否则你可能会在连接数量方面达到某种限制FTP 服务器将允许单个客户端,或客户端操作系统将允许的连接数。您的应用程序受带宽的限制可能比受 CPU 的限制更多,因此运行太多线程可能会适得其反。您基本上会一次上传更多项目,但吞吐量会减少。

我假设您的应用程序有一组关闭 cron4j 的任务,然后这些任务获取一个目录并通过 FTP 上传它,这听起来对吗?

如果是这样,我建议将其分成几个阶段,首先 cron4j 启动构建一个可运行对象的任务,该对象在执行时将执行 FTP 上传,而不是任务本身执行上传。将此 runnable 放入队列中(来自 java.util.concurrent 的阻塞队列是个好主意)。然后,您在线程池中运行了另一个任务的几个实例,这些任务将从队列中取出作业并执行它们(试验池中的线程数,看看什么能给您带来良好的吞吐量)。这将为您提供一组竞争消费者,您可以限制并发上传的有效数量(例如一次 4 个)。


如评论中所述,SEDA 模式听起来很有趣。如果你打算用 Java 进行任何并发编程,我建议你买一本 Doug Lea 的“Java 并发编程:设计原则和模式”,它不包括 Java 5 的内容,但其中大部分是基于 Java 5 的。无论如何在书中。他清楚地解释了很多关于线程安全以及如何编写好的 Java 代码的问题。

关于java - 多线程文件传输到 FTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com