Slide 1

Slide 1 text

goroutineͱ ϚϧνεϨου
 σβΠϯύλʔϯ ߦ໦ লޗ

Slide 2

Slide 2 text

ࣗݾ঺հ • ߦ໦ লޗ(φϝΩ γϣ΢ΰ) • 2016೥౓৽ଔ • Goݴޠྺ 5ϲ݄

Slide 3

Slide 3 text

goroutine࢖ͬͯ·͔͢?

Slide 4

Slide 4 text

GoݴޠΛޠΔ্Ͱ ֎ͤͳ͍ฒྻԽͷػೳ

Slide 5

Slide 5 text

͜ͷ࢖͍ํ͋ͬͯΔʁ ͢ΕͬͲ͜Θ͍

Slide 6

Slide 6 text

goroutineͷߟ͑ํͱ σβΠϯύλʔϯ

Slide 7

Slide 7 text

GoͰͷฒߦॲཧ

Slide 8

Slide 8 text

υΩϡϝϯτΛॲ෼͢Δ࢓ࣄ υΩϡϝϯτͷࢁ ম٫࿍ Gopher͘Μͱ
 Χʔτ ͨ͘͞Μ͋ΔυΩϡϝϯτΛ೩΍͍ͨ͠

Slide 9

Slide 9 text

୯७ͳΞϓϩʔν Gopher͘ΜΛ2ඖ(ਓ?)ʹ

Slide 10

Slide 10 text

ಉظ଴͕ͪൃੜͯ͠͠·͏ ম٫࿍Λ࢖͑Δͷ͸1౓ʹ1ඖ(ਓ?)

Slide 11

Slide 11 text

ಉظ଴͕ͪൃੜͯ͠͠·͏ ম٫࿍Λ࢖͑Δͷ͸1౓ʹ1ඖ(ਓ?)

Slide 12

Slide 12 text

૿΍ͯ͠΋ޮՌ্͕͕ΓͮΒ͍

Slide 13

Slide 13 text

GoݴޠͰͷΞϓϩʔν

Slide 14

Slide 14 text

ฒྻͳॲཧ Gopher͘ΜΛฒྻʹಈ͔͢ͷͰ͸ͳ͘

Slide 15

Slide 15 text

ฒߦͳॲཧ Gopher͘ΜΛฒߦʹಈ͔͢

Slide 16

Slide 16 text

ฒߦͳॲཧ υΩϡϝϯτΛΧʔτʹੵΉGopher͘Μ

Slide 17

Slide 17 text

ฒߦͳॲཧ ΧʔτΛӡͿGopher͘Μ

Slide 18

Slide 18 text

ฒߦͳॲཧ υΩϡϝϯτΛΧʔτ͔Β͓Ζͯ͠ ೩΍͢Gopher͘Μ

Slide 19

Slide 19 text

ฒߦͳॲཧ υΩϡϝϯτΛੵΜͰ͍ͨ ΧʔτΛ໭͢Gopher͘Μ

Slide 20

Slide 20 text

Կ͕خ͍͠ͷ͔

Slide 21

Slide 21 text

ॲཧΛ଴ͨͳͯ͘ྑ͍

Slide 22

Slide 22 text

ॲཧΛ଴ͨͳͯ͘ྑ͍ ӡͿͷ͕࢓ࣄ

Slide 23

Slide 23 text

ॲཧΛ଴ͨͳͯ͘ྑ͍ ೩΍͠ऴΘΔͷΛ ଴ͨͳ͍

Slide 24

Slide 24 text

΍Δ͜ͱ͕ͳ͚Ε͹ࢭ·Δ͚ͩ

Slide 25

Slide 25 text

͜ΕΒΛ࣮ݱ͢Δػೳ • channel • Gopher͘ΜͷؒΛܨ͍Ͱ͘ΕΔ • ෳ਺ͷGopher͘Μ͕channelΛୣ͍߹͏ͷΛ๷͙ • select • ෳ਺ͷGopher͘Μ͔ΒຊΛड͚औΕΔ • mutexͷύοέʔδͱ͔

Slide 26

Slide 26 text

ϚϧνεϨου σβΠϯύλʔϯ

Slide 27

Slide 27 text

ϚϧνεϨου
 σβΠϯύλʔϯ • Single Thread Execution • Immutable • Guarded Suspension • Balking • Producer-Consumer • Read-Write Lock • Thread-Per-Message • Worker Thread • Future • Two-Phase Termination • Thread-Specific Storage • Active Object

Slide 28

Slide 28 text

channelͰղܾ • Single Thread Execution • Immutable • Guarded Suspension • Balking • Producer-Consumer • Read-Write Lock • Thread-Per-Message • Worker Thread • Future • Two-Phase Termination • Thread-Specific Storage • Active Object

Slide 29

Slide 29 text

selectͰղܾ • Single Thread Execution • Immutable • Guarded Suspension • Balking • Producer-Consumer • Read-Write Lock • Thread-Per-Message • Worker Thread • Future • Two-Phase Termination • Thread-Specific Storage • Active Object

Slide 30

Slide 30 text

ύοέʔδͰղܾ • Single Thread Execution • Immutable • Guarded Suspension • Balking • Producer-Consumer • Read-Write Lock • Thread-Per-Message • Worker Thread • Future • Two-Phase Termination • Thread-Specific Storage • Active Object

Slide 31

Slide 31 text

ؾΛ͚ͭͳ͍ͱ͍͚ͳ͍͜ͱ

Slide 32

Slide 32 text

ϚϧνεϨου σβΠϯύλʔϯ • Single Thread Execution • Immutable • Guarded Suspension • Balking • Producer-Consumer • Read-Write Lock • Thread-Per-Message • Worker Thread • Future • Two-Phase Termination • Thread-Specific Storage • Active Object

Slide 33

Slide 33 text

Thread-Per Message • ϝοηʔδΛड͚औΔຖʹεϨουΛཱͯΔ

Slide 34

Slide 34 text

Thread-Per Message • ϝοηʔδΛड͚औΔຖʹεϨουΛཱͯΔ υΩϡϝϯτΛड͚औͬͨΒ……

Slide 35

Slide 35 text

Thread-Per Message • ϝοηʔδΛड͚औΔຖʹεϨουΛཱͯΔ ͦΕຖʹGopher͘ΜΛ࡞Δ

Slide 36

Slide 36 text

Thread-Per Message • ϝοηʔδΛड͚औΔຖʹεϨουΛཱͯΔ

Slide 37

Slide 37 text

Goͩͱ΍Γ͕ͪ func processHandler(w http.ResponseWriter, r *http.Request) { ~~~όϦσʔγϣϯͱ͔Payloadऔಘͱ͔~~ go Heavy() // ͜ͷ෦෼ʂʂʂ w.WriteHeader(http.StatusAccepted) }

Slide 38

Slide 38 text

Worker Thread • ࠷ॳ͔ΒεϨουΛಈ͔͓ͯ͘͠

Slide 39

Slide 39 text

Worker Thread • ࠷ॳ͔ΒεϨουΛಈ͔͓ͯ͘͠ υΩϡϝϯτΛ
 ड͚औͬͨΒ…… !

Slide 40

Slide 40 text

Worker Thread • ࠷ॳ͔ΒεϨουΛಈ͔͓ͯ͘͠ ۭ͍ͯΔ ୭͔͕୲౰

Slide 41

Slide 41 text

Worker Thread • ࠷ॳ͔ΒεϨουΛಈ͔͓ͯ͘͠ ! ·ͨདྷͨΒ……

Slide 42

Slide 42 text

Worker Thread • ࠷ॳ͔ΒεϨουΛಈ͔͓ͯ͘͠ ۭ͍ͯΔ ୭͔͕୲౰

Slide 43

Slide 43 text

Worker Thread • ࠷ॳ͔ΒεϨουΛಈ͔͓ͯ͘͠ Gopher͘Μͷ ਺͸૿͑ͳ͍

Slide 44

Slide 44 text

channelͩͱ؆୯ func heavy(queue <-chan string) { url := <-queue // ϦΫΤετॲཧ } func main() { queue := make(chan string, 32) for i := 0; i < 3; i++ { go heavy(queue) } queue <- “https://google.co.jp” queue <- “https://google.com” // লུ }

Slide 45

Slide 45 text

͜ΕͰ΋͏goroutine΋ ා͘ͳ͍ʂʂʂ

Slide 46

Slide 46 text

Α͖goroutineϥΠϑΛ!!!