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

Goroutine meets a signal

K
April 15, 2018

Goroutine meets a signal

Go Conference 2018 Spring (https://gocon.connpass.com/event/82515/) でシグナルを Goroutine へブロードキャストする & それを context.Context でラップする話をしました

K

April 15, 2018
Tweet

More Decks by K

Other Decks in Programming

Transcript

  1. (PSPVUJOFNFFUTBTJHOBM
    !(P$POGFSFODF4QSJOH

    View Slide

  2. !DPEFIFY !$PEF)FY
    w *MJLF1FSM94(P
    w *MJWFJO5PLZPGSPN0LJOBXB
    w ❤$BQCBUUJOHDFOUFS
    w .FSDBSJ *OD/FX
    w IUUQTDPEFIFYIBUFCMPKQ

    View Slide

  3. View Slide

  4. Έͳ͞Μ

    View Slide

  5. γάφϧ࢖ͬͯ·͔͢ʁ

    View Slide

  6. ࢖ͬͯ·͢ΑͶʂ

    View Slide

  7. ஌Βͳ͍ਓͷͨΊʹ

    View Slide

  8. View Slide

  9. શ͘໘ന͘ͳ͍ʜ

    View Slide

  10. % man signal
    ʮࠓ͙࣮͢ߦʯ

    View Slide

  11. Ͳ͏͍͏࣌ʹ

    γάφϧΛ࢖͍·͔͢ʁ

    View Slide

  12. γάφϧΛ࢖͏৔໘
    w ॲཧΛ தஅcऴྃc࠶ىಈ
    ͍ͨ͠
    w ׂΓࠐΈॲཧΛߦ͍͍ͨ
    w γάφϧΛૹΔ͜ͱͰڍಈΛมߋ͍ͨ͠ͳͲ

    ʢϨΞέʔεʁʣ

    View Slide

  13. γάφϧ͸ϓϩηεʹ

    ૹΓ·͢ΑͶ

    View Slide

  14. ߋʹݴ͏ͱ

    View Slide

  15. ਌ϓϩηεࢠϓϩηε

    ΁ͷγάφϧૹ৴΋Մೳ

    View Slide

  16. ͔͠͠

    View Slide

  17. զʑ͕ѻ͏΋ͷ͸

    HPSPVUJOF

    View Slide

  18. HPSPVUJOF΁

    γάφϧΛૹΓ͍ͨ

    View Slide

  19. ݁࿦͔Β

    View Slide

  20. HPSPVUJOF΁

    γάφϧΛૹ৴Ͱ͖ͳ͍

    View Slide

  21. ͕ͩ

    ࣅͨΑ͏ͳ͜ͱ͸Ͱ͖Δ

    View Slide

  22. γάφϧΛ௨஌͢Δ
    શͯͷ(PSPVUJOF΁ϒϩʔυΩϟετ

    View Slide

  23. ඞཁͳ͜ͱ
    w ௨஌༻ͷDIBOOFM
    w ͲΜͳγάφϧ͕ૹΒΕ͖͔ͯͨ

    View Slide

  24. ඞཁͳ͜ͱ
    w ௨஌༻ͷDIBOOFM
    w ͲΜͳγάφϧ͕ૹΒΕ͖͔ͯͨ

    View Slide

  25. close(ch)

    View Slide

  26. close(ch)
    DIΛ͍࣋ͬͯΔશͯͷHPSPVUJOF΁

    DIBOOFMΛૹ৴͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  27. ඞཁͳ͜ͱ
    w ௨஌༻ͷDIBOOFM
    w ͲΜͳγάφϧ͕ૹΒΕ͖͔ͯͨ

    View Slide

  28. signal.Notify(ch)

    View Slide

  29. signal.Notify(ch)
    DI͔Βड͚औΕ͹ྑ͍

    View Slide

  30. ࣮ࡍͷίʔυ

    View Slide

  31. γάφϧ௨஌Λߦ͏ߏ଄ମ

    View Slide

  32. NBJOͷॲཧ

    View Slide

  33. ΊͬͪΌ؆୯

    View Slide

  34. ͔͠͠ɺզʑ͸

    context.Context ΋ཉ͍͠

    View Slide

  35. context.Context

    γάφϧϋϯυϥͷ࣮૷
    γάφϧ΋ड͚औΕΔcontext.Context

    View Slide

  36. context.Context

    View Slide

  37. context.Context
    w جຊతʹΩϟϯηϧͷͨΊͷDIBOOFMͷड͚౉͠
    Λߦ͏໨తʹ࢖͏
    w context.Value ΋͋Δ͕ɺࠓճ͸ؾʹ͠ͳ͍
    w JOUFSGBDFͰ͋Δ

    View Slide

  38. context.Context

    View Slide

  39. ͞͞΍͔ͳϧʔϧ΋ʜ

    View Slide

  40. IUUQTHPMBOHPSHQLHDPOUFYU
    l%POPUTUPSF$POUFYUTJOTJEFBTUSVDU
    UZQFJOTUFBEʜz
    func DoSomething(ctx context.Context, arg Arg) error {

    // ... use ctx ...

    }

    View Slide

  41. ͳΔ΄Ͳ

    View Slide

  42. ͜͜Ͱ

    ࣍ͷ63-Λݟ·͠ΐ͏
    IUUQTHJUIVCDPN$PEF)FYHPMFUTZOPQTJT

    View Slide

  43. View Slide

  44. View Slide

  45. View Slide

  46. context.Context

    ҰͭͰ྆ํड͚औΕΔ

    View Slide

  47. ࣮૷
    IUUQTHJTUHJUIVCDPN$PEF)FY
    DCFECGDBGGECGB

    View Slide

  48. ߏ଄ମ΁DUYΛ֨ೲ͢Δ

    View Slide

  49. ൓ٯߦҝͰ͢Ͷ

    View Slide

  50. JOUFSGBDFͷ࣮૷

    View Slide

  51. NBJOͷॲཧ

    View Slide

  52. ͜ΕͰԿ͕خ͍͠ͷ͔ʁ

    View Slide

  53. خ͍͜͠ͱ
    w ड৴෦෼ͷίʔυ͕؆ܿʹͳͬͯಡΈ΍͘͢ͳΔ
    w γάφϧͷ௨஌ͱDPOUFYUΩϟϯηϧͷ௨஌ͷ྆
    ํΛγϯϓϧʹॻ͚Δ
    w ϥοϓ͢ΔલͷDPOUFYUͱͯ͠΋ѻ͑ΔͷͰ҆৺

    View Slide

  54. DPOUFYUͷϥοϓʹ
    ஫ҙ͢Δ͜ͱ

    View Slide

  55. ஫ҙ͢Δ͜ͱ
    w ֎෦͔ΒԿ͔͠Β௨஌͕͋ͬͯɺͦΕΛτϦΨʔʹ
    ֤HPSPVUJOF΁΋௨஌͍ͨ͠৔߹͸ྑͦ͞͏
    w Ή΍Έʹϥοϓ͢Δͱத਎͕෼͔Βͳ͍ɺҙਤ͕Θ
    ͔Βͳ͍໰୊͕ൃੜ͢Δ

    View Slide

  56. ༷ʑͳؾ͕࣋ͪ͋Δͱ

    ࢥ͍·͕͢

    View Slide

  57. ͝੩ௌ

    ͋Γ͕ͱ͏͍͟͝·ͨ͠
    1MFBTFEJTDVTTXJUINF

    View Slide