Hacker News | 📄 原文链接 | 2026-11-06 收录

比行缓冲更好的输出方式:既要及时,也要够快

来源:nullprogram.com — 2026-11-05

📋 概述

缓冲输出通常有两种:全缓冲与行缓冲。输出到终端时默认用行缓冲,每完成一行就 flush;其他情况全缓冲,攒满或等到某个不确定的时刻才写。行缓冲是非交互终端程序的常见瓶颈,以至于为了绕开它会专门把输出重定向到文件或管道。作者认为不必如此,可以两头都要:既及时把整行送到终端,又保持全缓冲的速度。他用 strace 展示了现状有多粗糙——glibc 的行缓冲是字面意义上的按行,甚至会把一次 puts 的字符串拆成多次 write,而 CPython 的规则是「追加新输出后如果缓冲区里有换行就 flush」,代价是可能输出半行。文章随后给出一个自己的缓冲区结构,用标志位区分错误与行缓冲,并推导出既能保持整行交付、又不额外系统调用的写策略。

🔑 核心要点

💡 金句

We can have our cake and eat it, too: promptly delivering lines to a terminal at fully-buffered speeds.
← 返回 Hacker News 首页