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
190
キューとは何か
キューが分からない、何に使うか不明、という話があったので、リングバッファを用いた例を使って説明を試みました。
tsuda.a
April 24, 2024
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
130
バックアップしていますか?
tsudaahr
0
85
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
89
NPUわからん
tsudaahr
0
150
計算量オーダーの話
tsudaahr
1
330
クラウド初学者が抱える不安について
tsudaahr
0
200
等幅は死んだ(ぇ
tsudaahr
0
64
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
150
何のために文字数をカウントするのか?
tsudaahr
0
71
Other Decks in Programming
See All in Programming
Webフレームワークとともに利用するWeb components / JSConf.jp おかわり
spring_raining
1
160
保守性を高める AWS CDK のセオリー・ベストプラクティス
yamanashi_ren01
5
390
技術を改善し続ける
gumioji
0
190
AWS CDKにおけるL2 Constructの仕組み / aws-cdk-l2-construct
gotok365
4
540
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
230
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
320
コードジェネレーターで 効率的な開発をする / Efficient development with code generators
linyows
0
110
Google Cloudとo11yで実現するアプリケーション開発者主体のDB改善
nnaka2992
1
170
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
2.2k
Jasprが凄い話
hyshu
0
210
Duke on CRaC with Jakarta EE
ivargrimstad
0
520
Swift Testingのモチベを上げたい
stoticdev
2
230
Featured
See All Featured
It's Worth the Effort
3n
184
28k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
460
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Site-Speed That Sticks
csswizardry
4
420
Code Review Best Practice
trishagee
67
18k
The Invisible Side of Design
smashingmag
299
50k
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?