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
tsuda.a
April 24, 2024
Programming
0
100
キューとは何か
キューが分からない、何に使うか不明、という話があったので、リングバッファを用いた例を使って説明を試みました。
tsuda.a
April 24, 2024
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
クラウド初学者が抱える不安について
tsudaahr
0
43
等幅は死んだ(ぇ
tsudaahr
0
20
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
52
何のために文字数をカウントするのか?
tsudaahr
0
17
文字 is 何?
tsudaahr
0
47
16進数は何型
tsudaahr
0
2
全銀トラブルとC言語とバッファオーバーフロー
tsudaahr
0
20
ライトワンスは改ざん防止の夢を見るか?
tsudaahr
0
5
Python自作シリアライズ
tsudaahr
0
44
Other Decks in Programming
See All in Programming
Amazon Aurora Serverless v2が意外と高かった話と、AWS Database Migration Serviceの話
satoshi256kbyte
1
110
酒飲んでたらテックリードになった話
spbaya0141
0
210
『WordPressコミュニティで学ぶ』OSS貢献の多様性
ippey
0
300
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
1
140
TypeScriptでもLLMアプリケーション開発 / LLM Application In Typescript
rkaga
5
1.4k
Porting mruby/c for the SNES (Super Famicom) - RubyKaigi 2024
gedorinku
0
800
JavaScript Closure
asoluka
0
2k
FoodGram
iseruuuuu
0
230
RailsConf 2024: Riffing on Rails: sketch your way to better designed code
kaspth
1
220
mb_trim関数を作りました
youkidearitai
PRO
1
250
Dev ContainersとTestcontainers
bells17
3
100
TypeScriptコードの漸進的改善 / Progressive Improvement of TypeScript Code
medley
1
470
Featured
See All Featured
Clear Off the Table
cherdarchuk
86
310k
Become a Pro
speakerdeck
PRO
13
4.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
41
4.5k
Building Applications with DynamoDB
mza
88
5.7k
Optimizing for Happiness
mojombo
371
69k
Unsuck your backbone
ammeep
664
57k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
KATA
mclloyd
16
12k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Practical Orchestrator
shlominoach
183
9.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
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?