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
0
12
並行処理(超入門)
ryo takaya
May 24, 2023
Tweet
Share
More Decks by ryo takaya
See All by ryo takaya
軽量なスレッドとは?
ryotakaya
0
120
PHP8.0へのバージョンアップ始めました
ryotakaya
0
700
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
74
5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.9k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
RailsConf 2023
tenderlove
30
1.2k
GitHub's CSS Performance
jonrohan
1032
460k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
840
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Language of Interfaces
destraynor
161
25k
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