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
740
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
Goの格言”Errors are values”の本質を読み解く
sakiengineer
10
2.6k
どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門
sakiengineer
1
2.4k
アプリ側のコードを書いていた人がLambdaに触れて気づいたこと
sakiengineer
0
1.6k
epollによるNetwork I/O in Goランタイム
sakiengineer
3
2.1k
スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜
sakiengineer
12
4.8k
Other Decks in Technology
See All in Technology
ソフトウェア開発現代史: なぜ日本のソフトウェア開発は「滝」なのか?製造業の成功体験とのギャップ #jassttokyo
takabow
2
1.5k
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
2
210
KCD Brazil '25: Enabling Developers with Dapr & Backstage
salaboy
1
120
ウェブアクセシビリティとは
lycorptech_jp
PRO
0
250
パスキーでのログインを 実装してみよう!
hibiki_cube
0
590
数百台のオンプレミスのサーバーをEKSに移行した話
yukiteraoka
0
640
OPENLOGI Company Profile for engineer
hr01
1
22k
Go の analysis パッケージで自作するリファクタリングツール
kworkdev
PRO
1
410
OCI見積もり入門セミナー
oracle4engineer
PRO
0
110
銀行でDevOpsを進める理由と実践例 / 20250317 Masaki Iwama
shift_evolve
1
100
ISUCONにPHPで挑み続けてできるようになっ(てき)たこと / phperkaigi2025
blue_goheimochi
0
140
PHPでアクターモデルを活用したSagaパターンの実践法 / php-saga-pattern-with-actor-model
ytake
0
1k
Featured
See All Featured
Statistics for Hackers
jakevdp
798
220k
How GitHub (no longer) Works
holman
314
140k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Building a Modern Day E-commerce SEO Strategy
aleyda
39
7.2k
GitHub's CSS Performance
jonrohan
1030
460k
Music & Morning Musume
bryan
46
6.4k
A designer walks into a library…
pauljervisheath
205
24k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
For a Future-Friendly Web
brad_frost
176
9.6k
How to Ace a Technical Interview
jacobian
276
23k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Making Projects Easy
brettharned
116
6.1k
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