リングバッファとは
リングバッファとはリング状になったバッファのこと。そもそもバッファとは一時的にデータを留めておく記憶領域のことを指す。
問題はなぜリング状にする必要があったのか、また、バッファはなんのために使われているのかである。
まずバッファはなんのために使われているのかを考えていく。もしバッファがなかった場合、データは届けられたら準備が整っていようがいまいが原則すぐに使わなければならない。
これは一時的に保存しておけるような場所はないのだから当然である。夏場に冷蔵庫なしで大量の魚を相手にするようなものである。
しかもこちらにはすぐにやらなければいけないタスクが大量にある状況。やってられない。
ということでできたのがバッファである。バッファがあればこちら側の準備ができるまで保存しておいて使いたいときにすぐに使える。
これがあると非常に便利になってできることも増える。ただ、これにも欠点がある。それはすぐにいっぱいになってしまうことである。
釣り好きの夫が毎日馬鹿みたいに魚を釣り上げる。夫はバッファを見ずに釣りに行ってしまうのでどれだけ入るかなんて気にせずにどんどん釣ってくる。
最初のうちはバッファのお陰で文句を言いながらも「まあバッファがあるし...」とやっていたがいつのまにかバッファ(余裕)がなくなってしまった。
そしてこれを解決してくれるのがバッファリングである。バッファリングは名前の通りリング状になっている。
一杯になると先頭(最初に釣ってきた魚)を取り出して入れるか、もう入らないと知らせて新しい魚を入れないか決められる。
これで古い魚を入れ替えることで無制限に入れられるようになった。
似たような言葉にスプールというものがある。スプールはデータベースから配信サーバへデータを転送する際にそのデータを一時的に保存して少しずつ処理していくものである。
基本的にはバッファと変わらない。というかスプールのことをバッファというという説明をしているサイトもあったくらいである。
使われ方の違いとしてはスプールの記憶装置はハードディスクにあるというくらいである。
なのでスプールという言葉が出てきたらバッファと置き換えてしまえば問題はない。
少し脱線したが一度戻りコンピュータ目線で見ていく。バッファがない場合、CPUは周辺装置にデータを送る際、少しずつしか送れない。
今はそれほど感じないかもしれないがプリンタなどにデータを送るのとコピーしたものを別のファイルに貼るのを想像してほしい。
明らかにプリンタにデータを送る方が時間がかかる。なので当然のように周辺装置からの返答も時間がかかってしまう。
しかもこのデータを送ったり、返答を待っている間はCPUは別の仕事が出来ないときた。これは厄介である。
もし、メールを送るのに5分もかかりその間他の動作はできないと言われたらどうだろうか?しかも20通も届いている。
仕事をサボる口実にはなりそうだが、スマホでそんなことされたら溜まったものではない。
なのでバッファにとりあえずデータをまとめて投げといてそこから周辺装置に少しずつ処理していってもらうようにしている。
これでCPUは自由の身である。バッファはメモリ領域にあるので電気信号だけなのでそれほど時間もかからない。
【まとめ】
リングバッファ、バッファがないと困ったことになりそうである。