【问题标题】:The fastest way to implement mktree in FTP在 FTP 中实现 mktree 的最快方法
【发布时间】:2009-05-24 22:26:59
【问题描述】:

使用 FTP 协议递归创建目录的最快算法(类似于 UNIX mkdir -p)通常是什么?

我考虑过一种方法:

  1. MKDIR 节点
  2. 如果错误和剩余节点与下一个节点一起转到 1
  3. 结束

但是如果目录的一部分很可能存在,这可能会导致性能不佳。例如,通过一些摊销,“/a/b/c/d/e/f/g”路径的“/a/b/c/d”部分存在 %99 的时间。

【问题讨论】:

    标签: algorithm ftp file-transfer


    【解决方案1】:

    考虑到发送命令和接收响应需要花费大部分时间,创建目录路径的最快方法是使用尽可能少的命令。

    因为除了尝试创建或 cd 到一个目录来检查它的存在之外别无他法,只需要使用 mkdir a; mkdir a/b; ...,mkdir a/b/c/d/e/f 通常是最快的方法(不要 cd 进入子目录来创建下一个,因为这会延长过程)。

    如果您以这种方式创建多个目录,您当然可以跟踪您已经创建了哪些顶级目录。此外,根据路径的长度和上层目录已经存在的可能性,您可以尝试从例如开始mkdir a/b/c(用于 a/b/c/d/e/f),如果不成功则回溯。但是,如果目录更可能不存在,从长远来看,这实际上会变慢。

    【讨论】:

      【解决方案2】:

      如果现有目录层次结构以任何给定深度结束的可能性相同,则 二进制搜索 开始位置将是最快的方法。但是作为dseifert points out,如果大多数时候目录已经存在到k级,那么在k级而不是n/2级开始二进制搜索会更快。

      顺便说一句,您必须创建 很多 非常深 目录,这样的优化才值得您花时间。你确定你没有过早优化吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 2023-04-07
        • 2017-03-20
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        相关资源
        最近更新 更多