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
750
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.5k
アプリ側のコードを書いていた人がLambdaに触れて気づいたこと
sakiengineer
0
1.6k
epollによるNetwork I/O in Goランタイム
sakiengineer
3
2.1k
スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜
sakiengineer
12
4.9k
Other Decks in Technology
See All in Technology
アプリケーションの中身が見える!Mackerel APMの全貌と展望 / Mackerel APMリリースパーティ
mackerelio
0
440
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
12k
mnt_data_とは?ChatGPTコード実行環境を深堀りしてみた
icck
0
210
2025advance01
minamizaki
0
130
いまさら聞けない Git 超入門 〜Gitって結局なに?から始める第一歩〜
devops_vtj
0
160
ローカル環境でAIを動かそう!
falken
PRO
1
170
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
740
NW運用の工夫と発明
recuraki
1
760
ソフトウェアテストのAI活用_ver1.10
fumisuke
0
220
Introduction to Bill One Development Engineer
sansan33
PRO
0
240
GigaViewerにおけるMackerel APM導入の裏側
7474
0
460
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
340
Featured
See All Featured
Designing for humans not robots
tammielis
253
25k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.3k
Designing Experiences People Love
moore
142
24k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Practical Orchestrator
shlominoach
188
11k
KATA
mclloyd
29
14k
Facilitating Awesome Meetings
lara
54
6.4k
Docker and Python
trallard
44
3.4k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
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