Slide 1

Slide 1 text

select文の内部実装見つけました GeekGig #1, AUG 11 2021 さき(H.Saki) @saki-engineer

Slide 2

Slide 2 text

About Me 自己紹介 l ͖͞ )4BLJ ○ ౦େ޻ֶ෦ ˠ ࠓ೥͔Β৽ࣾձਓ ݚमத ○ 5XJUUFS!TBLJFOHJOFFS l աڈͷ੒Ռ෺ FUDʜ

Slide 3

Slide 3 text

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͕ͳ͚Ε͹ϒϩοΫ

Slide 4

Slide 4 text

runtime/select.go runtime/select.go ߦ໨ʹʮ͜ͷϑΝΠϧʹ͸TFMFDUจͷ࣮૷ؚ͕·Ε͍ͯ·͢ʯͱͷهࡌ͋Γ

Slide 5

Slide 5 text

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行くらいある }

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

ͪΐͬͱԿݴͬͯΔ͔Θ͔Μͳ͍

Slide 8

Slide 8 text

͜Μͳͱ͖͸ίϝϯτʹண໨͠Α͏ʂ

Slide 9

Slide 9 text

Implementation of select statement select文の実装 ϒϩοΫ͠ͳͯ͘Α͍৔߹͔Β࣮૷͍ͯ͠Δ͜ͱ͕֬ೝͰ͖Δɻ TFMFDU͢Δର৅ͷத͔Βૹड৴Ͱ͖Δ νϟωϧ͕ͳ͍͔Λ୳͍ͯ͠ΔͬΆ͍ l νϟωϧ͔Βड৴ՄˠSFDW l όοϑΝ͔Βड৴ՄˠCVGSFDW l νϟωϧDMPTFࡁΈˠSDMPTF ͔ͳʁͱ͍͏Ծઆ͕༰қʹཱͭ

Slide 10

Slide 10 text

Implementation of select statement select文の実装 ͦͷ࣍ʹɺϒϩοΫʹೖΔ৔߹ͷॲཧΛॻ͍͍ͯΔɻ ૹड৴Ͱ͖Δνϟωϧ͕ͳ ͔ͬͨͱ͖ͷॲཧ͔ͳʁ HPQBSLؔ਺ͰҎԼͷॲཧΛ࣮ߦ͠ɺTFMFDUจͷCMPDLΛ࣮ݱ TFMFDUจΛ࣮ߦ͍ͯ͠Δΰʔϧʔνϯͷঢ়ଶΛSVOOJOH͔ΒXBJUJOHʹมߋ ֘౰ΰʔϧʔνϯΛεϨου͔ΒҰ୴੾Γ཭͢

Slide 11

Slide 11 text

Summary まとめ l TFMFDUจຊମͷ࣮૷͸SVOUJNFTFMFDUHPͷதͷTFMFDUHPؔ਺ ○ େମͷ(Pͷجװػೳ͸SVOUJNFύοέʔδͷதʹ͋Δ l ίʔυΛૉ௚ʹಡΈղ͔ͳͯ͘΋ɺ࣮૷ͷେ࿮Λ୳Δ͜ͱ͸Ͱ͖Δ ख͕͔ΓʹͳΔͷ͸ҎԼ ○ ίϝϯτ ○ ม਺ɾఆ਺ɾؔ਺໊ ○ ߏ଄ମͷϑΟʔϧυ໊ ○ ϥϕϧ໊ l ΈΜͳSVOUJNFύοέʔδΛಡ΋͏;&ˑ

Slide 12

Slide 12 text

5IBOLZPVGPSMJTUFOJOH