Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
キューとは何か
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tsuda.a
April 24, 2024
Programming
0
260
キューとは何か
キューが分からない、何に使うか不明、という話があったので、リングバッファを用いた例を使って説明を試みました。
tsuda.a
April 24, 2024
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
230
バックアップしていますか?
tsudaahr
0
140
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
140
NPUわからん
tsudaahr
0
200
計算量オーダーの話
tsudaahr
1
430
クラウド初学者が抱える不安について
tsudaahr
0
310
等幅は死んだ(ぇ
tsudaahr
0
120
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
210
何のために文字数をカウントするのか?
tsudaahr
0
120
Other Decks in Programming
See All in Programming
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
640
モダンOBSプラグイン開発
umireon
0
190
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
440
Java 21/25 Virtual Threads 소개
debop
0
300
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
190
Codex の「自走力」を高める
yorifuji
0
1.3k
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
270
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
4
2.1k
飯MCP
yusukebe
0
400
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
1.4k
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
160
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
260
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
310
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
290
Technical Leadership for Architectural Decision Making
baasie
3
300
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
500
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
93
Making Projects Easy
brettharned
120
6.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.8k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
850
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
410
Ethics towards AI in product and experience design
skipperchong
2
240
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?