【问题标题】:Why is it slower to print directly to console/terminal than redirecting?为什么直接打印到控制台/终端比重定向慢?
【发布时间】:2015-06-10 20:16:03
【问题描述】:

为什么在终端上打印多行而不是将其重定向到几乎是即时的文件需要更多的时间?

【问题讨论】:

  • 这比我有资格解释的要复杂得多,但答案是缓冲。终端输出在生成时显示,而重定向到文件将在写入之前填充缓冲区,从而最大限度地减少写入次数。
  • 这只是其中的一部分:终端比磁盘
  • 是的,我知道答案与缓冲有关,但我正在寻找详细的答案以了解底层机制。

标签: linux io terminal


【解决方案1】:

首先,终端很慢。对于每次更新,他们必须:

  1. 解析和解释任何控制代码。
  2. 解析、解释和呈现任何转义码。
  3. 解释和解释任何多字节和组合字符。
  4. 更新适当的屏幕和滚动缓冲区。
  5. 用适当的字体渲染它。

如果您使用 screen 或 tmux,可能会再次执行上述所有操作。

同时,要重定向到文件,您只需:

  1. 将数据转储到 RAM 中(以便稍后回写到存储中)。

    这一步非常小,甚至没有在终端的清单上注册。

这不是人们优化的东西,因为终端的速度很少成为问题。终端之间的差异可以是 50 倍(过去 VGA 与 fbcon),您可以使用简单的time cat somebigfile.txt 来计时。

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多