我有这种情况。操作系统是UNIX。服务器A上有许多文件。需要将这些文件(它们是XML格式)FTP到服务器B,解析它们并将从特定标记检索到的值存储到数据库中。 perl中解析器的当前实现使得文件被顺序处理。可以在这里使用java中的多线程概念,以便可以更快地获取提取吗?
答案 0 :(得分:0)
提取和处理是不同的步骤。
对于提取步骤,一次提取多个文件只会在文件较小时提高速度。否则,即使一次只传输一个文件,您也会受到两台机器之间连接带宽的限制。
对于处理步骤:如果文件不相关,是的,您将看到通过一致处理多个文件来加速(如果服务器本身不是旧的单核非超线程机器)。
这些更改都不需要切换到Java。这是一个单独的问题。
答案 1 :(得分:0)
是的,它会显着提高性能。您有两个I / O操作(FTP,数据库访问),一些线程可以使用处理器内核进行解析,而其他线程则在I / O操作期间等待。
答案 2 :(得分:0)
我必须在Java中完成几乎相同的任务。 High Level Concurrency Objects给了我很多帮助。特别是我使用ThreadPoolExecutor
到Executors.newFixedThreadPool(concurrentCount);
。
使用新的FTP连接下载每个FTP文件。优点是您可以节省连接启动和文件请求的时间,因为当时另一个进程正在使用您的带宽。
对于与FTP相关的任务,我使用了org.apache.commons.net.ftp.FTPClient
编辑:您可以使用Future.get()
方法在下载完成后立即开始XML处理。