Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ユニクロの レジから学ぶ Goroutine #yapc8oji #yapc8ojiA /un...

ユニクロの レジから学ぶ Goroutine #yapc8oji #yapc8ojiA /uniqlo_golang

ユニクロのレジは多くの客が並んでも効率良く捌けるような工夫がされています。
そんなユニクロのレジの工夫はちょうどGoの並列化の仕組み(goroutine・channel)と非常に似ています。
そこで本発表ではユニクロのレジの工夫を例に挙げて、goroutineの仕組みや実プログラムでの活用例などを紹介します。

https://github.com/hachiojipm/yapcasia-8oji-2016mid-timetable/issues/73
https://gist.github.com/catatsuy/4b4ef8f0fe7b547ac73a25cfeba21d05

Kaneko Tatsuya

July 03, 2016
Tweet

More Decks by Kaneko Tatsuya

Other Decks in Technology

Transcript

  1. (Pͷߏ଄ମ w (Pͷߏ଄ମ͸pFMEΛ࣋ͪɺܕͱ໊લΛࢦఆ͢Δ w sync.Mutex͸TZODύοέʔδͰఆٛ͞Ε͍ͯΔߏ଄ମ w ແ໊ͰຒΊࠐΉͱDPNNFSߏ଄ମʹsync.Mutexͷ ϝιου͕ຒΊࠐ·Εͯ࢖͑ΔΑ͏ʹͳΔ w sync.Mutex͸ޙͰઆ໌͢Δ

    w []*clothes͸DMPUIFTͷϙΠϯλͷTMJDF w ࣅͨ֓೦Ͱ഑ྻͱTMJDF྆ํ࢖͑Δ͕ɺ഑ྻΑΓ΋TMJDF Λ࢖͏ʢͱ͍͏ΑΓ഑ྻ͸΄΅࢖Θͳ͍ʣ w (Pͷ഑ྻ͸ཁૉ਺ΛؚΊͯܕͳͷͰɺ్தͰαΠζ ΛมߋͰ͖ͳ͍ w TMJDFͷཁૉ਺͸ม͑ΒΕΔ w ϝιου΋ఆٛͰ͖Δʢ$ݴޠͷߏ଄ମͱ͸ҧ͏ʣ
  2. ٬Λฒ΂Δʢνϟωϧʣ w ૊ΈࠐΈͷNBLFؔ਺Λ࢖͏ͱνϟωϧͷॳظԽ͕Ͱ͖Δ w ୈҾ਺Ͱνϟωϧͷ༰ྔΛࢦఆ͢Δ w go func()ͷதͷॲཧ͸HPSPVUJOFͰ࣮ߦ͞ΕΔ w for

    {}͸ແݶϧʔϓ͕ͩɺHPSPVUJOFͷதͰ࣮ߦ͢Ε͹NBJOؔ਺ͷअຐΛͤͣ ʹॲཧΛͣͬͱ࣮ߦͰ͖Δ w νϟωϧ΁஋Λૹ৴͢Δͷ΋ड৴͢Δͷ΋Ͱߦ͏ w νϟωϧͷ௕͕͞ʹͳΔ·Ͱ٬Λૹ৴͢Δ w νϟωϧͷ௕͕͞ҎԼʹͳͬͨΒʹͳΔ·Ͱ٬Λૹ৴͢Δ w ຊ౰͸٬ʹΑͬͯങ͏΋ͷ͸ҧ͏͕ɺࠓճ͸શһಉ͡ʹͨ͠
  3. ฒྻॲཧ਺Λ੍ޚ͢Δ w νϟωϧ͸༰ྔҎ্ͷ஋ΛૹΔͱ଴ͪʹͳΔ w ༰ྔͷνϟωϧͰฒྻ਺Λ੍ޚ͢Δ w ˠϨδʹਓ͍Δ w λεΫΛେྔʹಉ࣮࣌ߦ͢Δͱ๫૸͢ΔͷͰɺ࣮ ϓϩάϥϜͰ΋ඞཁ

    w ࣮ߦ͕ऴྃͨ͠Βνϟωϧܦ༝Ͱ௨஌͞Εͯɺ଴ ͪʹͳ͍ͬͯΔHPSPVUJOFͷॲཧ͕࢝·Δ w ˠϨδ͕ۭ͍ͨΒۭ͍ͨϨδʹ٬͕ߦ͘ • νϟωϧͷܕ͸int΍boolͰ΋ಈ͘ • ۭͷߏ଄ମstruct{}Λ࢖͏ͱνϟωϧͷ஋ʹ৘ ใΛ࣋ͨ͢͜ͱ͕Ͱ͖ͳ͍ͷͰɺਪ঑͞ΕΔ • cf: GoݴޠͰCPU਺ʹԠͯ͡ฒྻॲཧ਺Λ੍ݶ͢Δ | SOTA http://deeeet.com/writing/ 2014/07/30/golang-parallel-by-cpu/ ࣮ߦ͕ऴྃͨ͠ ͷͰड৴͢Δ ༰ྔ෼Λૹ৴ ͨ͠Β଴ͭ
  4. Ϩδͷਓͱ෰ΛͨͨΉਓͷڠௐ w Ϩδͷਓ͕ྉۚΛܭࢉ͔ͯ͠Βɺ෰ΛͨͨΉॲཧΛ ෰ΛͨͨΉਓʹ΍ΒͤΔ • makeؔ਺ͷୈ2Ҿ਺Λ༩͑ͳ͚Ε͹༰ྔ͕0ͷνϟ ωϧ͕࡞ΕΔ(unbuffered channel) w ͓ۚΛ෷͏ॲཧͱ෰ΛંΓͨͨΉॲཧ͕྆ํऴ

    ྃˠϨδͷॲཧ͕ऴྃ w ˠ෰͕ͨͨΉॲཧ͕ऴΘΔͷΛνϟωϧΛ࢖ͬ ͯ଴ͭ w HPSPVUJOF͔Βߏ଄ମʹॻ͖ࠐΉؒʹɺࢀর͢Δͱ ڝ߹ঢ়ଶʹͳΔ w HPSPVUJOF͔Βείʔϓ֎ͷม਺ʹॻ͖ࠐΉࡍʹ ͸ඞͣϩοΫΛऔΓɺࢀর͞Εͳ͍Α͏ʹ͢Δ • sync.MutexͷϝιουLock() Unlock()Λ ࢖͏ͱͰ͖Δ ྉۚܭࢉ ෰ΛͨͨΉਓ ͷॲཧ ͜͜ʹ͕͔͔࣌ؒΔॲཧ ͓ۚΛࢧ෷͏ॲཧͱ ෰ΛͨͨΉॲཧͷ ྆ํ͕ऴྃͯ͠ Ϩδۀ຿ऴྃ
  5. ·ͱΊ w ϢχΫϩͷϨδ͸٬ʢλεΫʣΛޮ཰ྑ͘ࡹ͘࢓૊Έ͕͋Δ w ٬ΛྻͰ؅ཧ w Ϩδۀ຿Λ઀٬ͱ෰ΛͨͨΉॲཧʹ෼ׂ w (PݴޠͷHPSPVUJOFͱνϟωϧ͸γϯϓϧͳϧʔϧ͔͠ͳ͍ ͕ɺͱͯ΋ύϫϑϧ

    w ޮ཰ྑ͘$16ͷίΞΛ࢖͍੾ΕΔίʔυΛॻ͚Δ w ࠓճͷίʔυ͸࣮ࡍͷιϑτ΢ΣΞͰ࢖͑Δ w ϢχΫϩͷϨδ͸ඇৗʹγεςϚνοΫͰޮ཰͕ྑ͍࢓૊Έ