【きゅー】

キュー とは?

最終更新:
💡 先に並んだデータを、先に取り出す待ち行列

基本形では、先に追加したデータを先に取り出すFIFO(先入れ先出し)のデータ構造。タスクなどを待ち行列に置く用途で使う。メッセージサービスの配信順や処理完了順は、別の条件も関係する。

📌 このページのポイント
FIFOキュー:先に入れたデータを先に出す dequeue enqueue D 追加する A 先頭 B 2番目 C 末尾 取り出す 末尾へ A・B・Cの順に追加し、その後Dを追加 取り出す順:A → B → C → D 複数担当での処理完了順は、別の条件
基本形のFIFOの例。メッセージサービスの配信保証は種類や設定で異なります。
ひよこ ひよこ
キューって何?
ペンギン先生 ペンギン先生
基本のFIFOキューなら、末尾に追加し、先頭から取り出す待ち行列だよ。A、B、Cの順に追加したら、A、B、Cの順に取り出すんだ。複数の担当が同時に処理する場合は、完了する順番まで同じとは限らないよ
ひよこ ひよこ
スタックとどう違うの?
ペンギン先生 ペンギン先生
スタックはLIFOで、最後に入れたものから取り出すよ。お皿を積んで上から取るイメージだね。キューは先に入れたもの、スタックは後に入れたものが先に出る、と比べてみよう
ひよこ ひよこ
AWSのSQSも必ずFIFOなの?
ペンギン先生 ペンギン先生
SQSはAmazon Simple Queue Serviceというメッセージサービスだよ。標準キューは順序が入れ替わったり同じメッセージが届いたりすることがある。FIFOキューでは同じメッセージグループ内の順序を扱う。名前にQueueが付いていても、保証は種類ごとに確認しよう
ひよこ ひよこ
優先度付きキューって何?
ペンギン先生 ペンギン先生
到着順ではなく、決めた優先順位で取り出すものだよ。内部にヒープを使う実装もある。優先度の数値が大きい方を先にするか小さい方を先にするかは実装の決まりで、PythonのPriorityQueueでは小さい値を先に取り出すよ
ひよこ ひよこ
メッセージを受け取ったら、そのタスクは終わり?
ペンギン先生 ペンギン先生
受け取ることと完了は別だよ。SQSでは受信したメッセージが一定時間見えなくなり、処理後に削除する。削除しないまま可視性タイムアウトが切れると再び受信できる。再処理に備え、同じ処理を繰り返しても不都合が起きない設計が大切だね
ひよこ ひよこ
何度も失敗するタスクはどうするの?
ペンギン先生 ペンギン先生
SQSではデッドレターキューと、受信回数の上限などの転送ポリシーを設定して、繰り返し失敗するメッセージを分けられるよ。自動で必ず用意されるわけではないので、設定して原因を調べよう
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「キュー」って出てきたら「データを順番に取り出すための待ち行列」と思えばだいたいOK!
📖 おまけ:英語の意味
「Queue」 = 待ち行列
💬 列に並んで待つイメージで、データの待ち行列を表す言葉だよ

参考資料

← 用語集にもどる