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

How Communicating Sequential Goroutines Work

Koki Ide
March 25, 2017

How Communicating Sequential Goroutines Work

Koki Ide

March 25, 2017
Tweet

More Decks by Koki Ide

Other Decks in Technology

Transcript

  1. None
  2. ,PLJ*EF !OJDPOFHPUP .FSDBSJ4PV[PI*OD TPQIPNPSFPGUIF6OJWFSTJUZPG5PLZP

  3. ࠓ೔ͷ࿩ͷΰʔϧ ɾ$PODVSSFODZʹ͍ͭͯৄ͘͠ͳΔ ɾ(PͰ.FTTBHFQBTTJOH͕Ͳ͏࣮ݱ͞Ε͍ͯΔ͔஌Δ ˠ(PͬͯεήʔʂʂͬͯͳΔ

  4. "HFOEB 4IBSFENFNPSZBOE.FTTBHFQBTTJOH*1$ $PODVSSFODZ.PEFM $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF

  5. $PODVSSFODZ.PEFM

  6. $PODVSSFODZ.PEFM %POPUDPNNVOJDBUFCZTIBSJOHNFNPSZ JOTUFBE TIBSFNFNPSZCZDPNNVOJDBUJOH

  7. ͦ΋ͦ΋ͳͥϓϩηεؒ௨৴ *1$ ͕ඞཁͳͷ͔ ɾෳ਺Ϣʔβʔ͕৘ใʹฒߦΞΫηεͰ͖Δඞཁ ɾܭࢉͷߴ଎Խ ɾγεςϜΛϞδϡʔϧԽͯ͠ߏ੒͍ͨ͠ $PODVSSFODZ.PEFM

  8. ɾ4IBSFENFNPSZ*OUFSQSPDFTT$PNNVOJDBUJPO ɾ.FTTBHFQBTTJOH*OUFSQSPDFTT$PNNVOJDBUJPO $PODVSSFODZ΁ͷΞϓϩʔνํ๏ *1$ ͸େ͖͘छྨʹ෼͔ΕΔ ڠௐϓϩηεؒͰڞ༗ϝϞϦྖҬ͕֬อ͞ΕΔ ڠௐϓϩηεؒͷϝοηʔδަ׵Ͱ௨৴͢Δ $PODVSSFODZ.PEFM

  9. ಉ͡ॲཧ ੜ࢈ऀফඅऀ໰୊ Λॻ͍ͯΈΔ ɾ4IBSFENFNPSZ*OUFSQSPDFTT$PNNVOJDBUJPO ɾ.FTTBHFQBTTJOH*OUFSQSPDFTT$PNNVOJDBUJPO ڠௐϓϩηεؒͰڞ༗ϝϞϦྖҬ͕֬อ͞ΕΔ ڠௐϓϩηεؒͷϝοηʔδަ׵Ͱ௨৴͢Δ $PODVSSFODZ.PEFM

  10. ɾ4IBSFENFNPSZ*OUFSQSPDFTT$PNNVOJDBUJPO $ Ͱॻ͍ͯΈͨྫ $PODVSSFODZ.PEFM

  11. ੜ࢈ऀ͸HPPETΛੜ࢈ͯ͠RVFVFʹQVTI͢Δ ফඅऀ͸EPOFͷ஋ΛݟͯɺHPPET͕ۭ͔Ͳ͏͔ ֬ೝͯ͠ɺRVFVF͔ΒQPQ͢Δ ফඅ͠ऴΘͬͨΒEPOFΛUSVFʹ͢Δ $PODVSSFODZ.PEFM

  12. (PͰॻ͍ͯΈͨྫ ɾ.FTTBHFQBTTJOH*OUFSQSPDFTT$PNNVOJDBUJPO $PODVSSFODZ.PEFM

  13. ੜ࢈ऀ͸HPPETΛੜ࢈ͯ͠DIBOOFMʹ౤͛Δ ੜ࢈͕ऴΘͬͨΒEPOFΛ౤͛Δ ফඅऀ͸DIBOOFM͔Βड͚औΔ EPOFΛड͚औͬͨΒॲཧΛऴ͑Δ $PODVSSFODZ.PEFM

  14. 4IBSFENFNPSZBOE.FTTBHFQBTTJOH*1$

  15. $PODVSSFODZ.PEFM

  16. 4IBSFENFNPSZ*OUFSQSPDFTT$PNNVOJDBUJPO جຊతʹ04͸ϓϩηεΛଞϓϩηεͷϝϞϦʹΞΫηεͤ͞ͳ͍ ͜ͷ੍໿ΛͭҎ্ͷϓϩηε͕औΓআ͘ඞཁ͕͋Δ σʔλͷܗࣜ΍Ұ͸ϓϩηεؒͰܾΊΔͨΊɺ04͸ؔΘΒͳ͍ ಉ͡Ґஔʹಉ࣌ʹॻ͖ࠐ·ͳ͍͜ͱΛ࣮֬ʹ͢Δඞཁ͕͋Δ 4IBSFENFNPSZϞσϧͷಛ௃

  17. ϝϞϦ଎౓Ͱߦ͑ΔͷͰૣ͍ ϝοηʔδύογϯά͸ҰൠతʹTZTDBMM Ͱ࣮૷͞ΕΔͷͰɺΧʔωϧΛհࡏͨ͠࢓ࣄΛඞཁͱ͢ΔͨΊ஗͍ ϨʔείϯσΟγϣϯ͕ى͜Βͳ͍Α͏ʹϩοΫΛͱΔ͜ͱ͕ଟ͍ͨΊ Ұൠతʹ࣮૷͸೉͍͠ͱ͞ΕΔ 4IBSFENFNPSZ*OUFSQSPDFTT$PNNVOJDBUJPO 4IBSFENFNPSZϞσϧͷಛ௃

  18. .FTTBHFQBTTJOH*OUFSQSPDFTT$PNNVOJDBUJPO

  19. খ͍͞σʔλΛަ׵͢Δͷʹ༗ޮ .FTTBHFQBTTJOHϞσϧͷಛ௃ 4IBSFENFNPSZϞσϧʹൺ΂࣮ͯ૷͸༰қͱ͞ΕΔ .FTTBHFQBTTJOH*OUFSQSPDFTT$PNNVOJDBUJPO

  20. $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF

  21. $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF HPSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼ TFMFDU DIBOOFM HPSPVUJOFؒͰͷϝοηʔδύογϯάΛߦ͏ CZUFͷܰྔͳεϨουͷΑ͏ͳ΋ͷ ෳ਺ͷDIBOOFMͷड৴Λಉ࣌ʹߦ͏৔߹ͳͲʹ༻͍Δ

  22. HPSPVUJOF ೚ҙͷ਺ͷ04εϨουʹ೚ҙͷ਺ͷΰϧʔνϯΛεέδϡʔϦϯά͢Δ ./εέδϡʔϦϯάΛ࠾༻ ίϯςΩετεΠονΛ͢͹΍࣮͘ߦ͠γεςϜ಺ͷ͢΂ͯͷί ΞΛ׆༻Ͱ͖Δ͕εέδϡʔϥʔ΁ͷ௥Ճ͕൥ࡶ (P͸ͦͷ൥ࡶ͞ΛؾʹͤͣίʔυΛॻ͚ΔΑ͏ʹͯ͘͠Ε͍ͯΔ ਆʂʂ $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼

  23. IUUQTUBMLTHPEPDPSHHJUIVCDPNOJDPOFHPUPUBMLTDPODVSSFODZTMJEF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼

  24. IUUQRJJUBDPNOJDPOFHPUPJUFNTEDEGDDDC $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼

  25. DIBOOFM ܕࢦఆ͕ՄೳͰɺTFOESFDFJWFͰϒϩοΫ͢Δ pSTUDMBTTWBMVFͳͷͰҾ਺΍໭Γ஋ʹ΋࢖͑Δ CV⒎FSΛࢦఆ͢Δ͜ͱͰ4FNBQIPSFతͳ࢖͍ํ΋Մೳ $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼

  26. #MPDLJOH2VFVFతͳ࢖͍ํ ༗ݶPSແݶͷCV⒎FSΛ࣋ͭΩϡʔɻ ΩϟύγςΟΛӽ͑ͯ௥Ճ͠Α͏ͱ͢Δͱ͖ٴͼۭ ͷঢ়ଶͰऔΓग़ͦ͏ͱ͢Δͱ͖ʹϒϩοΫ͢Δ͜ͱ ͰɺͭͷϓϩηεͰڞ༗ࢿݯͷॴ༗ݖΛมߋͯ͠ ಉظ͢Δɻ $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼ DIBOOFM

  27. 4FNBQIPSFతͳ࢖͍ํ ڞ༗ࢿݯʹରͯ͠ΞΫηεՄೳͳ ϓϩηεͷ਺Λ੍ݶ͢Δ $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼ DIBOOFM

  28. TFMFDU ෳ਺ͷDIBOOFMͷಡΈॻ͖Λ੍ޚͯ͘͠ΕΔ UJNFPVU΍ఆظ࣮ߦͳͲʹ༻͍Δ͜ͱ͕Ͱ͖Δ DIBOOFMΛڠྗʹαϙʔτ ਆ $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼

  29. TFMFDU UJNFPVU ඵ͢ΔͱUJNFPVU͢Δ ԼΛඵʹ͢ΔͱzSFTVMUz͕ฦΔ $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼

  30. ఆظ࣮ߦ ຖඵఆظ࣮ߦ͞Εɺ ඵͰUJNFPVU͢Δ $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOF $PNNVOJDBUJOH4FRVFOUJBM(PSPVUJOFͰ༻͍ΒΕ͍ͯΔ෦඼ TFMFDU

  31. 4VNNBSZ $PODVSSFODZʹ͸େ͖͘෼͚ͯ 4IBSFENFNPSZͱ.FTTBHFQBTTJOH͕͋Γɺར఺ͱܽ఺͕͋Δ DIBOOFMͱTFMFDUͰڧྗͳ.FTTBHFQBTTJOHΛ࣮ݱͰ͖Δ TZODύοέʔδΛ࢖͑͹ഉଞ੍ޚ΋Ͱ͖Δ͚Ͳɺ (PΒ͘͠DIBOOFM࢖͍͜ͳͯ͠zTIBSFNFNPSZCZDPNNVOJDBUJOHz HPSPVUJOF͸͍͢͝ɻSVOUJNFҎԼΛಡ΋͏ʂʂ

  32. (P࠷ߴʂʂʂʂʂ 4VNNBSZ

  33. ,PLJ*EF !OJDPOFHPUP .FSDBSJ4PV[PI*OD TPQIPNPSFPGUIF6OJWFSTJUZPG5PLZP