【问题标题】:Can I get a faster output pipe than /dev/null?我可以获得比 /dev/null 更快的输出管道吗?
【发布时间】:2011-02-13 02:04:02
【问题描述】:

我正在运行一项巨大的任务 [使用 perl + 数据库等编写的自动翻译脚本] 不间断运行大约 2 周。在思考如何加快速度时,我看到翻译器一直将所有内容(所有翻译的句子,所有信息)输出到 STDOUT。当我在控制台上获得输出时,这使得它的工作明显变慢。

我显然将输出传送到/dev/null,但后来我想“可以有更快的东西吗?”输出如此之多,真的会有所作为。

这就是我要问你的问题,因为据我所知,没有什么比这更快了……(但我还远不是一个仅仅过去 3 年每天都在使用 linux 的大师)

【问题讨论】:

    标签: linux performance dev-null


    【解决方案1】:

    到 /dev/null 的输出是在内核中实现的,这非常快。输出管道现在不是您的问题,它是构建发送到 /dev/null 的字符串所需的时间。我建议您通过程序并注释掉(或使用if $be_verbose 保护)所有无用的打印语句行。我很确定这会给你一个明显的加速。

    【讨论】:

    • 是的,但最糟糕的是 C++,我没有代码。知道 /dev/null 是最好的还是很酷的 ;)
    • 啊,好吧。你确实说它是用perl写的。 ;-) 是的,/dev/null 的速度与没有内核黑客攻击的输出文件描述符一样快,即使这样也很难被击败。
    • 我为评论中的补充选择了这个答案。我不能同时接受这两个答案。 stackoverflow 不允许我这样做;)
    • /dev/null 无法超越速度。比什么更快:返回计数;
    • @Benson 不会所有这些“如果 $be_verbose”条件会减慢计算速度吗?我一直有这样的疑问:在不删除或注释掉调试消息的情况下,哪种方法最有效?
    【解决方案2】:

    我能够(通过dd)每秒向 /dev/null 转储 20 GB 的数据。这不是你的瓶颈:-p

    几乎唯一让它更快的方法是首先不生成数据 - 完全删除日志记录语句。生成所有日志消息的成本可能远远超过丢弃它们的成本。

    【讨论】:

    • 感谢测试。我没想到它会成为瓶颈,而只是想知道……我坐的地方是 23:15。有这样想法的好时机:P
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多