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
ryo takaya
May 24, 2023
14
0
Share
並行処理(超入門)
ryo takaya
May 24, 2023
More Decks by ryo takaya
See All by ryo takaya
軽量なスレッドとは?
ryotakaya
0
140
PHP8.0へのバージョンアップ始めました
ryotakaya
0
750
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.7k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
110
The agentic SEO stack - context over prompts
schlessera
0
730
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Producing Creativity
orderedlist
PRO
348
40k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Accessibility Awareness
sabderemane
0
89
Designing Powerful Visuals for Engaging Learning
tmiket
1
320
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
260
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
53k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
95
Transcript
並行処理(超入門)
並行処理をしたら何が嬉しいのか 複数の処理を分散並行して行う事によって処理時間が短縮する - DBの読み込みの性能を上げる工夫(indexとか) - http通信でユーザーへのレスポンスを短くするための工夫(CDNとか) 基本的に速さは正義
並行処理と並列処理の違い 時間軸の違い • 並行処理: ある時間の範囲において、複数のタスクを扱うこと • 並列処理: ある時間の点において、複数のタスクを扱うこと 必ずしも同時に実行されているわけではない
並行処理は考えなきゃいけないポイントが多々ある - その処理は並列化をしたら早くなるのか?? - 必ず早くなるとは限らない - (ex. 順序に意味のある処理 - アムダールの法則
- 競合状態 - 共通のメモリにアクセス - データ競合、ロック
goroutine - プログラムを動作させる基本の単位 - goキーワードを記述するだけ
- fork-joinモデル - プログラムの処理を分岐させて親と子で並行に実行する - fork : goroutineを発生させて分岐する - join
: 分岐元の親のgoroutineと合流する 分岐元のgoroutineが先に終了した場合、分岐先のgoroutineが実行されず終了する
sync.WaitGroup 1. wg.Add()でカウンタを増やす 2.wg.Done()でカウンタを減らす 3.wg.Wait()で内部のカウンタが 0になるまでブロックする Wait()が合流ポイントとなっているため分岐先のgoroutineが実行が終わるまで分岐元 のgoroutineが終了しない
- Mutex - Locker - Cond https://pkg.go.dev/sync
channel ゴールーチン間で値を受け渡す際に使用する
- 値を送信・受信するまでブロックする - 3秒たってchannelに値を送信。その後分岐元の goroutineでchannelから値を受け取るまでブロック する。 channelは同期の手段でもある
None