$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
キューとは何か
Search
tsuda.a
April 24, 2024
Programming
0
240
キューとは何か
キューが分からない、何に使うか不明、という話があったので、リングバッファを用いた例を使って説明を試みました。
tsuda.a
April 24, 2024
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
210
バックアップしていますか?
tsudaahr
0
120
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
130
NPUわからん
tsudaahr
0
180
計算量オーダーの話
tsudaahr
1
400
クラウド初学者が抱える不安について
tsudaahr
0
280
等幅は死んだ(ぇ
tsudaahr
0
100
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
190
何のために文字数をカウントするのか?
tsudaahr
0
100
Other Decks in Programming
See All in Programming
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
650
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
7
3.4k
Micro Frontendsで築いた 共通基盤と運用の試行錯誤 / Building a Shared Platform with Micro Frontends: Operational Learnings
kyntk
1
1.7k
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.2k
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
680
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
350
CSC305 Lecture 17
javiergs
PRO
0
210
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2k
JJUG CCC 2025 Fall: Virtual Thread Deep Dive
ternbusty
3
510
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
5
1.1k
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
360
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
14k
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
65
Into the Great Unknown - MozCon
thekraken
40
2.2k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
The Cult of Friendly URLs
andyhume
79
6.7k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Designing for humans not robots
tammielis
254
26k
Making Projects Easy
brettharned
120
6.5k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Transcript
キューとは何か? すごい広島570 with IT初心者の会 85 LTDD 2024-3 #3 @tsuda_ahr
お題 • キューが分からない、何に使うか不明、という話があったので説明を試みて みます。
話すこと • 原始的な、データ構造としてのキューの話をします。
元ネタ https://speakerdeck.com/satoshi256kbyte/konpiyutasaiensuniokerukiyutosutatukunojie-shuo
この説明に疑問を持った
どこが疑問だったか • 並列並行処理とキューの説明が混在している。 • 待ち時間や輻輳の話も含まれている。 • 負荷の平準化(負荷分散)についても述べられている。 • 多分Amazon SQS
(Simple Queue Service) とかのサービスを念頭 に置いている。 • つまり、キューの説明としては盛り込みすぎでは?
ということで • 原始的なキューの目的やデータ構造についての説明を試みます。
そもそも「キュー」とは何か • 処理しないとならない、山積みの書類のこと(ぇ #比喩表現です念のため
現実だとこんな感じ キューから取り出して作業 する人 (下から取る) 山積みの書類 (キュー本体) キューに入れる人 (上にのせる)
応用1) 複数で処理する
応用2) Web(しろめ Web Server
手近な例 • レジ待ち。
コンピューターでは? • データ構造の一種として扱われる。
実装例 • たとえばリングバッファを使用する場合
リングバッファとは? • 末尾まで使うと先頭に戻ってくるような使い方をするバッファ 2 3 4 5 6 7 0
1 0 1 2 3 4 5 6 7 実際のリングバッファ リングバッファの概念図
ということで。 • キューの動きを追ってみます。
キューの動き(1) 5 1 6 2 0 7 4 3 5
6 2 0 7 4 3 5 1 6 0 7 4 3 1 2 Read ポインター : 0 Writeポインター : 0 Read ポインター : 0 Writeポインター : 1 Read ポインター : 0 Writeポインター : 2 初期状態 Enqueue(1) Enqueue(2) 書き込み 書き込み
キューの動き(2) 5 6 2 0 7 4 3 5 6
2 0 7 3 5 1 6 0 7 3 1 4 2 Read ポインター : 0 Writeポインター : 3 Read ポインター : 1 Writeポインター : 3 Read ポインター : 1 Writeポインター : 4 1 4 Enqueue(3) Dequeue(1) Enqueue(4) 書き込み 書き込み 読み込み
キューの動き(3) 5 6 0 7 4 3 5 1 6
2 0 7 5 1 6 0 7 3 1 4 2 Read ポインター : 2 Writeポインター : 4 Read ポインター : 3 Writeポインター : 4 Read ポインター : 4 Writeポインター : 4 2 3 4 Dequeue(2) Dequeue(3) Dequeue(4) 読み込み 読み込み 読み込み
特徴 • 固定長のバッファ(=固定サイズのメモリ)で実装可能。 • Read ポインターと Write ポインターに差があると、未読み出しのデータが ある。 •
バッファ数-1 のデータを蓄積可能。 (先の例の場合、バッファ数は 8 なので、7 データまで蓄積可能)
欠点 • バッファサイズに上限がある。 • なので最近はリスト構造などを使った無限長のキューの実装が多いのではな いか?
何がうれしいのか? • レジ待ちとほぼ一緒 • 要求の順番で処理ができる。 • 処理するほうは、一つずつ順番に処理できる。 • 要求するほうは、要求だけして逃げることもできる(=待たずに他の処理ができる)
デメリット • 要求に対して処理結果が即座に返せるなら、キューを使うメリットはほぼない。 • 順番は保証されるが、いつ結果が戻ってくるかはわからない。 • キューが長すぎるとひたすら戻ってこない。 • 今回説明した実装では、優先度を上げたりキャンセルしたりはできない。
こちらからは以上です。 • Any Question?