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

How Communicating Sequential Goroutines Work

26ae758ababcd94b99c8192dbdd5b8d3?s=47 Koki Ide
March 25, 2017

How Communicating Sequential Goroutines Work

26ae758ababcd94b99c8192dbdd5b8d3?s=128

Koki Ide

March 25, 2017
Tweet

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