克朗开发日志第2期:复制已完成——线程、系统调用,以及一个我尚未解决的性能问题

发布日期:2026-03-23 10:01:06   浏览量 :0
发布日期:2026-03-23 10:01:06  
0

与之前的命令相比,复制命令的实现相对简单。各种选项——递归、强制、试运行、详细输出、跳过已存在文件、禁止覆盖、模式过滤——都顺利整合在一起,没有遇到太大阻力。测试过程也很干净,这次没有出现严重的漏洞。

真正的挑战在于线程模型。
最初的实现存在一个根本性缺陷:一旦工作队列为空,线程就会立即退出循环,即使其他线程仍在发现需要处理的新目录。实际上,几乎所有操作都运行在单个线程上。修复这个问题需要彻底重新思考整个方案——线程不再过早终止,而是通过条件变量和通知机制智能地等待。只有当确实没有任何任务剩余时,它们才会退出。这增加了一整层新的复杂性,但却是必要且正确的复杂性。

更大的未解难题是处理大型目录时的性能问题。与列出内容或检查操作不同,复制操作无法缓存任何内容——每个文件操作都需要频繁进行系统调用,而系统调用代价高昂。文件越多,性能损失就越严重。我对某些特定场景有一些想法,但我不打算采用零散的局部解决方案。在找到更根本的解决方法之前,我不会认为这个问题已经得到妥善处理。

--preserve 选项目前故意未实现。保留元数据意味着更多的系统调用,在尚未找到降低该开销的方法之前,就在本已昂贵的操作之上再增加负担是没有意义的。

克龙(Kron)仍在从虚无中构建。
github.com/TheNobelVoid/kron

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部