>>339
fgets()だのread()だのが最終的にOSに対して割り込みを掛けるから。

そもそも何故CPU使用率が100%になるかというと、実行可能状態のスレッドが常に存在するから。
readシステムコールを呼んだ場合、そのスレッドは待ち状態になる。
全てのプロセスの全てのスレッドが待ち状態の場合、典型的なOSは(x86なら)hlt命令を実行する。
このhlt命令は、何か他の割り込みが掛かるまでCPUを休ませる効果を持つ。

割り込みの典型例がマウスやキーボード、そしてタイマー。
キーボードから何かが入力された場合、
その入力を欲しているスレッドに対して入力された文字が取得できる状態にして、そのスレッドを実行可能状態にする。
実行可能状態になったスレッドはそのうち実行状態になる。

色々省略したけど大雑把に言えば「キー入力があるまでCPUが休んじゃうから」って感じ。
「マルチスレッド 仕組み」とかでググるともっといい説明が出てくると思うよ。