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
select文の内部実装見つけました
Search
H.Saki
August 11, 2021
Technology
1
770
select文の内部実装見つけました
21/8/11 GeekGig #1 〜Goと私の一年〜にて発表
https://showcase-gig.connpass.com/event/217914/
H.Saki
August 11, 2021
Tweet
Share
More Decks by H.Saki
See All by H.Saki
slog.Handlerのよくある実装ミス
sakiengineer
4
160
Goの格言”Errors are values”の本質を読み解く
sakiengineer
10
2.7k
どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門
sakiengineer
1
2.6k
アプリ側のコードを書いていた人がLambdaに触れて気づいたこと
sakiengineer
0
1.6k
epollによるNetwork I/O in Goランタイム
sakiengineer
3
2.1k
スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜
sakiengineer
13
5k
Other Decks in Technology
See All in Technology
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
570
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
430
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
180
La gouvernance territoriale des données grâce à la plateforme Terreze
bluehats
0
180
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
9
73k
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
10k
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
250
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
860
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
410
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
10k
2つのフロントエンドと状態管理
mixi_engineers
PRO
3
110
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
870
Featured
See All Featured
The Language of Interfaces
destraynor
161
25k
KATA
mclloyd
32
14k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Scaling GitHub
holman
463
140k
Why Our Code Smells
bkeepers
PRO
339
57k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Practical Orchestrator
shlominoach
190
11k
Embracing the Ebb and Flow
colly
87
4.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Designing for humans not robots
tammielis
253
25k
Transcript
select文の内部実装見つけました GeekGig #1, AUG 11 2021 さき(H.Saki) @saki-engineer
About Me 自己紹介 l ͖͞ )4BLJ ◦ ౦େֶ෦ ˠ ࠓ͔Β৽ࣾձਓ
ݚमத ◦ 5XJUUFS!TBLJFOHJOFFS l աڈͷՌ FUDʜ
TFMFDUจͰɺதʹDBTFจΛॻ͘͜ͱͰॲཧͷذΛ࣮ݱ͍ͯ͠Δɻ Select statements select文 var i1, i2 int var ch1,
ch2 chan int select { case i1 = <-ch1: print("received ", i1, " from c1∖n") case ch2 <- i2: print("sent ", i2, " to c2∖n") default: print("no communication∖n") } νϟωϧDI͔Βͷड৴͕Մೳͳͱ͖࣮ߦ νϟωϧDIͷૹ৴͕Մೳͳͱ͖࣮ߦ ͍ͣΕͰͳ͍߹ʹ࣮ߦ EFGBVMUDBTF͕ͳ͚ΕϒϩοΫ
runtime/select.go runtime/select.go ߦʹʮ͜ͷϑΝΠϧʹTFMFDUจͷؚ࣮͕·Ε͍ͯ·͢ʯͱͷهࡌ͋Γ
runtime/select.go runtime/select.go TFMFDUจຊମͷهड़ɺ-ͷ GVOD TFMFDUHP ͰߦΘΕ͍ͯΔɻ // selectgo implements the
select statement. func selectgo(cas0 *scase, order0 *uint16, pc0 *uintptr, nsends, nrecvs int, block bool) (int, bool) { // (略) // 400行くらいある }
None
ͪΐͬͱԿݴͬͯΔ͔Θ͔Μͳ͍
͜Μͳͱ͖ίϝϯτʹண͠Α͏ʂ
Implementation of select statement select文の実装 ϒϩοΫ͠ͳͯ͘Α͍߹͔Β࣮͍ͯ͠Δ͜ͱ͕֬ೝͰ͖Δɻ TFMFDU͢Δରͷத͔Βૹड৴Ͱ͖Δ νϟωϧ͕ͳ͍͔Λ୳͍ͯ͠ΔͬΆ͍ l νϟωϧ͔Βड৴ՄˠSFDW
l όοϑΝ͔Βड৴ՄˠCVGSFDW l νϟωϧDMPTFࡁΈˠSDMPTF ͔ͳʁͱ͍͏Ծઆ͕༰қʹཱͭ
Implementation of select statement select文の実装 ͦͷ࣍ʹɺϒϩοΫʹೖΔ߹ͷॲཧΛॻ͍͍ͯΔɻ ૹड৴Ͱ͖Δνϟωϧ͕ͳ ͔ͬͨͱ͖ͷॲཧ͔ͳʁ HPQBSLؔͰҎԼͷॲཧΛ࣮ߦ͠ɺTFMFDUจͷCMPDLΛ࣮ݱ
TFMFDUจΛ࣮ߦ͍ͯ͠Δΰʔϧʔνϯͷঢ়ଶΛSVOOJOH͔ΒXBJUJOHʹมߋ ֘ΰʔϧʔνϯΛεϨου͔ΒҰ୴Γ͢
Summary まとめ l TFMFDUจຊମͷ࣮SVOUJNFTFMFDUHPͷதͷTFMFDUHPؔ ◦ େମͷ(PͷجװػೳSVOUJNFύοέʔδͷதʹ͋Δ l ίʔυΛૉʹಡΈղ͔ͳͯ͘ɺ࣮ͷେΛ୳Δ͜ͱͰ͖Δ ख͕͔ΓʹͳΔͷҎԼ ◦
ίϝϯτ ◦ มɾఆɾ໊ؔ ◦ ߏମͷϑΟʔϧυ໊ ◦ ϥϕϧ໊ l ΈΜͳSVOUJNFύοέʔδΛಡ͏;&ˑ
5IBOLZPVGPSMJTUFOJOH