命令行实用工具比C ++更快吗?

5

我有一个项目,需要操作某些输出文件。

可以通过使用grep、sed和管道符号|的组合来完成此操作。

另外,也可以编写C++程序来完成同样的操作。

是否有结论表明哪种方法更快,因为grep和sed已经相当优化了?


16
我猜当你写完这个C++应用程序时,这个脚本将已经完成了一千次。 - Xeo
编写更快的sed/awk/grep等工具相当困难。 - Drakosha
4
并不是每件事情都是钉子,要知道在手头的工作中使用正确的工具。 - Nim
如果工具最终变得太慢(例如,如果您有数百个文件并且正在生成大量进程),则您可能能够使用Perl快速完成某些操作。我敢打赌,对于您的目的,您无法找到比Perl脚本更好的解决方案! - Kerrek SB
4个回答

7

从技术角度来看,一个写得好的自包含C++程序将比使用两个或多个通过管道相互连接的shell命令更快,因为没有进程间通信的开销,并且它们可以根据你的实际需求进行定制和优化。

但是,除非你正在编写一个将会连续运行数年的程序,否则你永远不会注意到足够的收益值得这样做。

而预先优化的标准规则同样适用...


3
假设你已经了解了grep和sed开发者使用的所有算法和优化技巧,即使这样也要这样假设。 - KillianDS
@KillianDS:我怀疑Perl、Python或Boost中的正则表达式比grep慢不了多少。对于逐行处理简单文件,我使用Python比bash和sed获得更好的性能。 - André Caron

4

如果我是你,就使用已经存在的工具,因为它们可能已经存在很长时间并经过测试和尝试。自己编写一个新程序来完成相同的事情似乎是一种“重复造轮子”的行为,容易出错。


0
如果你真的需要比管道更快的性能,你可以下载grep和sed的源代码,并在一个应用程序中进行定制以满足你的需求(如果你计划分发你的代码,请注意许可证)。我非常惊讶地发现你甚至会注意到管道的开销(就像Flimzy提到的那样),所以如果事情真的那么慢,我会开始对你的应用程序进行分析。

0

如果您是一位非常优秀的C/C++程序员,并且花费了大量时间,很可能会编写出比您所考虑的管道更快的程序。但是,除非在这种情况下性能如此关键,以至于您必须以这种方式完成,否则应该使用管道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接