プログラミングの教科書や解説サイトを見ていると、「FIFO (first in first out)」や「LIFO (last in first out)」という概念が頻繁に出てきますよね。どちらもデータの処理順序を示す重要な考え方で、キュー(Queue)やスタック(Stack)というデータ構造の基礎になっています。でも、実際のところ、こういった概念がどんな場面で使われるのか疑問に思うこともあるでしょう。
今回は、FIFOとLIFOがどんな場面で実際に役立つのか、具体例を挙げながらご紹介します!
FIFO(First In, First Out)とは?
FIFOは「First In, First Out」の略で、「最初に入ったものが最初に出る」というルールに従ってデータを処理する方法です。これは「キュー」としても知られていて、順番に処理したいデータを管理するときに役立ちます。
FIFOの具体例
- タスクスケジューリング: 例えばプリンターのジョブやOSのプロセス管理などが該当します。最初にリクエストされたものから順番に処理することで、全体の公平性が保たれます。
- ネットワークパケットの処理: ネットワークルーターやファイアウォールなどでは、送信順にパケットを処理する必要があります。これもFIFOの一例です。
- Webサーバーのリクエスト管理: Webサーバーは、クライアントからのリクエストを順番に処理するために「リクエストキュー」を使用します。
FIFOを実現するキューは、Pythonではcollections.deque
を使って簡単に実装できます。たとえば.append()
と.popleft()
を用いることで、データを順番に入れたり出したりできます。
deque
についての解説はこちら!
LIFO(Last In, First Out)とは?
LIFOは「Last In, First Out」の略で、「最後に入ったものが最初に出る」というルールに従ってデータを処理する方法です。これは「スタック」としても知られており、データが逆順で処理されるような場合に便利です。
LIFOの具体例
- 関数コールスタック: プログラムで関数が呼び出されると、関数が終了するまで次の関数は実行されません。最後に呼び出された関数から順に処理が戻されるため、LIFOのルールに従っています。
- ブラウザの戻る操作: ブラウザで新しいページを開くと、それがスタックに積まれていきます。戻る操作をすると、最後に開いたページから順に戻れるのもLIFOの仕組みです。
- Undo機能: テキストエディタやペイントソフトなどの「Undo(元に戻す)」機能もスタック構造を使っています。最後に行った操作から順に取り消すことができるため、操作の履歴を管理するのに最適です。
Pythonでスタックを使う場合、リストを利用して.append()
と.pop()
メソッドで簡単に実装できます。
実務でのFIFOとLIFO
これらのFIFOとLIFOは、実務の中でもよく登場する概念です。たとえば以下のようなシーンで活躍します。
- データ処理の順序を制御したいとき: ログ処理やメッセージキューなど、特定の順序でデータを処理する場合に、FIFOやLIFOを用いると便利です。
- システム内部での管理: OSやアプリケーション内部では、プロセスやタスク、リクエストの順序を管理するためにキューやスタックを使用することが多いです。
まとめ
FIFOとLIFOは、データ処理の順序を管理するうえで非常に重要な概念です。最初に入ったものから処理するのか、最後に入ったものから処理するのかによって、データ処理の流れが大きく異なるため、理解しておくと役立つ場面が多いでしょう。
たとえば、タスクの順番待ちが発生するシステムではFIFOが必要ですし、履歴管理が必要なシステムではLIFOが役立ちます。プログラミングでデータの流れを制御するとき、どちらを使うべきか考えてみると、新たな解決策が見えてくるかもしれませんね。