ほとんどのターミナルアプリケーションは、ユーザーが即座に出力内容を確認できるように、行バッファリングを使用しています。このモードでは、システムは改行文字を検出するたびに出力バッファをフラッシュします。この手法はレスポンスの良い体験を提供しますが、プログラムが短期間に大量の出力を生成する場合、パフォーマンスのボトルネックとなります。例えば、`unzip`のようなツールでアーカイブを解凍する際、個々のファイル名をすべて表示するプロセスが実行時間を支配してしまうことがあります。これは、各ファイル名ごとに個別のシステム書き込みコールが必要になるためです。このため、ユーザーは速度を維持するために「quiet」モードを使用せざるを得ず、進捗の可視性を犠牲にすることがよくあります。

この問題を解決するために、著者は「期限ベース」のフラッシングメカニズムを提案しています。すべての改行で書き込みをトリガーする代わりに、システムはバッファを維持し、特定の時間期限(例えば100ミリ秒ごと)が経過したときにのみフラッシュします。このアプローチは、ネットワーク通信におけるアイドル時間を処理するNagleのアルゴリズムから着想を得ています。期限を使用することで、システムは十分な速さで生成された複数の行のテキストを、単一のシステム書き込みにバッチ処理することができます。100ミリ秒は一般的に人間の知覚よりも速いため、ユーザーはほぼ瞬時に出力を確認でき、同時に複数のシステムコールによるオーバーヘッドを大幅に削減できます。

この手法は、行バッファリングとフルバッファリングの間の折衷案を提供します。数千のファイルを処理するプログラムのような高スループットのシナリオでは、期限ベースのアプローチにより、プログラムは「いいとこ取り」をすることが可能になります。つまり、フルバッファリングに近い速度で動作しながら、リアルタイムに感じられる十分な速さでターミナルに行を届けることができます。この実装は、作業単位の間に期限をチェックすることで、プログラムのメインループに統合できます。この方法は追加のスレッドを必要としませんが、アプリケーションがバッファの状態を認識し、出力の遅延と処理スループットの間のトレードオフを調整できるようにする必要があります。ただし、ソースにはこれらのシナリオにおいて標準的な行バッファリングと比較して正確な速度向上を定量化する具体的なベンチマークデータは提供されていません。