How to achieve parallel compilation in Go 1.9

26ae758ababcd94b99c8192dbdd5b8d3?s=47 Koki Ide
November 05, 2017

How to achieve parallel compilation in Go 1.9

Go Conference 2017 @JP の発表資料です。

26ae758ababcd94b99c8192dbdd5b8d3?s=128

Koki Ide

November 05, 2017
Tweet

Transcript

  1. How to achieve parallel compilation in Go 1.9

  2. ,PLJ*EF !OJDPOFHPUP 'MBUU *OD TPQIPNPSFPGUIF6OJWFSTJUZPG5PLZP

  3. ࠓ೔ͷΞδΣϯμ ɾίϯύΠϧͬͯͲ͏΍Δͷ͔ͬ͘͟Γ͓͞Β͍ ɾ(PͰ͸͍ͬͨQBSBMMFMJ[FDPNQJMBUJPOͷઆ໌ ɾ(Pͬͯ͢͹Β͍͠

  4. 1BSBMMFMJ[F$PNQJMBUJPO 
 (P3FMFBTFE

  5. 1BSBMMFMJ[F$PNQJMBUJPO TZOD.BQ͚ͩ͡Όͳ͍Αʂʂ

  6. 1BSBMMFMJ[F$PNQJMBUJPO %POPUDPNNVOJDBUFCZTIBSJOHNFNPSZ JOTUFBE TIBSFNFNPSZCZDPNNVOJDBUJOH

  7. %POPUDPNNVOJDBUFCZTIBSJOHNFNPSZ JOTUFBE TIBSFNFNPSZCZDPNNVOJDBUJOH 1BSBMMFMJ[F$PNQJMBUJPO

  8. 1BSBMMFMJ[F$PNQJMBUJPO σϑΥͰฒྻίϯύΠϧ (0$0/$633&/5$0.1*-"5*0/ɹ·ͨ͸HDqBHTDͰແޮʹͰ͖Δ HDqBHTD͸HPSPVUJOF΋ੜ੒͞Εͣฒߦੑ͕ͳ͍

  9. $PODVSSFODZ.PEFM DNEDPNQJMFJOUFSOBMHD
 DNEDPNQJMFJOUFSOBMTTB DNEDPNQJMFJOUFSOBMTZOUBY ͋ͨΓΛಡΉ

  10. 1BSBMMFMJ[F$PNQJMBUJPO ͓͞Β͍ จࣈྻͱͯ͠ͷϓϩάϥϜ YZ  ୯ޠྻͱͯ͠ͷϓϩάϥϜ *% lYz &2'MPBU 

    1-64*% lZz 5*.&4*OU  ந৅ߏจ໦ ࣈ۟ղੳ ߏจղੳ
  11. 1BSBMMFMJ[F$PNQJMBUJPO ͓͞Β͍ ந৅ߏจ໦ ந৅ߏจ໦ ܕͳͲͷ෇Ճ৘ใ Ծ૝໋ྩྻ ػցޠίʔυ ҙຯղੳ தؒίʔυੜ੒ɾ࠷దԽ ػցޠίʔυੜ੒

    UZ  Y U '3Z '3'3  '3'3  Y'3
  12. ॳظԽ DNEDPNQJMFJOUFSOBMTZOUBYࣈ۟ղੳͱߏจղੳ DNEDPNQJMFJOUFSOBMHD"45΁ͷม׵ ܕνΣοΫɺΤεέʔϓղੳɺΠϯϥΠϯల։ɺΫϩʔδϟʔॲཧɺࣜධՁͷॱং෇͚ʢPSEFSHPʣɺ࠷దԽʢXBMLHPʣ DNEDPNQJMFJOUFSOBMTTB44"ܗࣜ΁ͷม׵ 44"ܗࣜͷ࠷దԽ 44"ܗ͔ࣜΒΞηϯϒϥ΁ͷม׵ Ξηϯϒϥ͔ΒϚγϯίʔυ΁ͷม׵ Ϛγϯίʔυɺ%8"3'γϯϘϧɺܕͱϦϑϨΫγϣϯͷ৘ใɺΤΫεϙʔτσʔλͳͲͷग़ྗ 1BSBMMFMJ[F$PNQJMBUJPO

    $PNQJMFͷखॱ
  13. DNEDPNQJMFJOUFSOBMTZOUBY"45΁ͷࣈ۟ղੳͱߏจղੳ 1BSBMMFMJ[F$PNQJMBUJPO $PNQJMFͷखॱ ˠطʹHPͰฒྻԽࡁΈ

  14. DNEDPNQJMFJOUFSOBMHD"45΁ͷม׵ 1BSBMMFMJ[F$PNQJMBUJPO $PNQJMFͷखॱ ˠ࡟আ༧ఆ

  15. ࣜධՁͷॱং෇͚ʢPSEFSHPʣɺ࠷దԽʢXBMLHPʣ 1BSBMMFMJ[F$PNQJMBUJPO $PNQJMFͷखॱ ˠDPODVSSFODZTBGFʹ࣮ߦ͢Δ͜ͱ͕೉͘͠ɺͦ͜·Ͱ஗͘ͳ͍ͷͰύε

  16. DNEDPNQJMFJOUFSOBMTTB44"ܗࣜ΁ͷม׵ 44"ܗࣜͷ࠷దԽ 1BSBMMFMJ[F$PNQJMBUJPO $PNQJMFͷखॱ ˠϘτϧωοΫ

  17. 1BSBMMFMJ[F$PNQJMBUJPO $PNQJMFͷखॱ ϑΣʔζ͕શͯͷؔ਺ʹରͯ͠׬͔ྃͯ͠Β͜ΕΒΛಉ࣌ʹ࣮ߦ͢Δɻ DNEDPNQJMFJOUFSOBMTTB44"ܗࣜ΁ͷม׵ 44"ܗࣜͷ࠷దԽ 44"ܗ͔ࣜΒΞηϯϒϥ΁ͷม׵ Ξηϯϒϥ͔ΒϚγϯίʔυ΁ͷม׵

  18. 1BSBMMFMJ[F$PNQJMBUJPO $PNQJMFͷखॱ Ϛγϯίʔυɺ%8"3'γϯϘϧɺܕͱϦϑϨΫγϣϯͷ৘ใɺΤΫεϙʔτσʔλͳͲͷग़ྗ ͜͜ͰϝιουϥούʔͳͲͷ৽͍ؔ͠਺͕ࣗಈੜ੒͞ΕɺdͷॲཧʹਐΉɻ ࠷ॳ͸͜ͷࣗಈੜ੒ͷؔ਺ʹؔͯ͠͸ฒྻίϯύΠϧ͞Ε͍ͯͳ͔͕ͬͨޙ $- ʹ࣮૷͞Εͨɻ

  19. ɾฒྻίϯύΠϧΛ҆શʹߦ͏ͨΊͷNVUFYͷ௥Ճ
 ɾݱঢ়ͷίϯύΠϥͷάϩʔόϧม਺Λඇάϩʔόϧʹมߋ͢Δ ɾdͷ࡞ۀΛฒྻԽ ɾෳࡶͳؔ਺ΛઌʹίϯύΠϧ͢ΔΑ͏ʹ͢Δ ɾࣗಈੜ੒͞Εͨؔ਺΋ฒྻίϯύΠϧ ύϑΥʔϚϯεˋ޲্  ɾͦͷଞࡉ͔͍࠷దԽ΍मਖ਼ ZZFSSPSΛ࢖͍ͬͯΔ෦෼Λ'BUBMGʹมߋ 

    ɾ$ͱ1ͷ஋ΛมԽͤͨ͞ࡍͷ෼ੳ 1BSBMMFMJ[F$PNQJMBUJPO ΍ͬͨ͜ͱ
  20. ɾฒྻίϯύΠϧΛ҆શʹߦ͏ͨΊͷNVUFYͷ௥Ճ
 ɾݱঢ়ͷίϯύΠϥͷάϩʔόϧม਺Λඇάϩʔόϧʹมߋ͢Δ ɾdͷ࡞ۀΛฒྻԽ ɾࣗಈੜ੒͞Εͨؔ਺΋ฒྻίϯύΠϧ ύϑΥʔϚϯεˋ޲্  ɾͦͷଞࡉ͔͍࠷దԽ΍मਖ਼ ZZFSSPSΛ࢖͍ͬͯΔ෦෼Λ'BUBMGʹมߋ  ɾ$ͱ1ͷ஋ΛมԽͤͨ͞ࡍͷ෼ੳ

    1BSBMMFMJ[F$PNQJMBUJPO ΍ͬͨ͜ͱ
  21. 1BSBMMFMJ[F$PNQJMBUJPO NVUFYͷ௥Ճ HDGVODTZNTNV 
 HD"45͔Β44"΁ͷม׵࣌ɺ ύοέʔδݕࡧ࣌ʹ࢖༻͞ΕΔ
 


  22. 1BSBMMFMJ[F$PNQJMBUJPO HDMBSHF4UBDL'SBNFT.Vɻ 44"ίϯύΠϧޙʹؔ਺ͷελο ΫϑϨʔϜ͕ڊେͰ͋Δ͜ͱΛൃ ݟͨ͠ࡍʹ༻͍ΒΕ·͢ɻ NVUFYͷ௥Ճ

  23. 1BSBMMFMJ[F$PNQJMBUJPO PCK-JOLIBTINV DUYUIBTI͸ UZQFT4ZNT ίϯύΠϥγϯϘϧ ͔Β PCK-4ZNT ϦϯΧγϯϘϧ ΁ͷ ϚοϐϯάΛ֨ೲ͍ͯͯ͠ɺ͔ͳΓසൟʹ

    ΞΫηε͞ΕΔɻ NVUFYͷ௥Ճ
  24. 1BSBMMFMJ[F$PNQJMBUJPO HDTJHOBUTFUNV TJHOBUTFUϚοϓ͸%8"3'ੜ੒࣌ ʹ࢖ΘΕͯΔ͜ͱ͸෼͔ͬͨΜͰ ͕ͪ͢ΐͬͱৄ͍͠࢖༻ঢ়گΘ͔ Βͳ͔ͬͨͷͰޙͰ΋ͬͱௐ΂ͯ ௥ه͠·͢ɻ NVUFYͷ௥Ճ

  25. 1BSBMMFMJ[F$PNQJMBUJPO HDUZQFQLHNV όοΫΤϯυͷίϯύΠϧ࣌΍ %8"3'ੜ੒࣌ʹUZQFTύοέʔδ ͷγϯϘϧͷݕࡧ͸Α͘ߦΘΕΔɻ NVUFYͷ௥Ճ

  26. 1BSBMMFMJ[F$PNQJMBUJPO UZQFTJOUFSOFE4USJOHTNV HD"45͔Β44"΁ͷม׵΍44"ૢ࡞ ʹ͓͍ͯɺBMMPDBUJPOΛݮΒͨ͢Ίʹ ໊લΛࢦఆͨ͠৽͍͠BVUPUNQT͕ಋ ೖ͞Ε͍ͯͯɺUZQFTJOUFSOFE4USJOHT Λอޢ͢Δඞཁ͕͋Δɻ NVUFYͷ௥Ճ

  27. ɾฒྻίϯύΠϧΛ҆શʹߦ͏ͨΊͷNVUFYͷ௥Ճ
 ɾݱঢ়ͷίϯύΠϥͷάϩʔόϧม਺Λඇάϩʔόϧʹมߋ͢Δ ɾdͷ࡞ۀΛฒྻԽ ɾࣗಈੜ੒͞Εͨؔ਺΋ฒྻίϯύΠϧ ύϑΥʔϚϯεˋ޲্  ɾͦͷଞࡉ͔͍࠷దԽ΍मਖ਼ ZZFSSPSΛ࢖͍ͬͯΔ෦෼Λ'BUBMGʹมߋ  ɾ$ͱ1ͷ஋ΛมԽͤͨ͞ࡍͷ෼ੳ

    1BSBMMFMJ[F$PNQJMBUJPO ΍ͬͨ͜ͱ
  28. $PODVSSFODZ.PEFM %POPUDPNNVOJDBUFCZTIBSJOHNFNPSZ JOTUFBE TIBSFNFNPSZCZDPNNVOJDBUJOH

  29. $PODVSSFODZ.PEFM ͜ͷ$-ޙʹ͸HDqBHTͷQ Dʹͳ͍ͬͯΔ
 1ϓϩηε਺ $ฒߦॲཧ਺ D͕૿Ճ͢Δͱ$16ίετ΋૿Ճ͢ΔͨΊD͕εΠʔτεϙοτ

  30. $PODVSSFODZ.PEFM ʢʣΑΓଟ͘ͷؔ਺Λಉ࣌ʹίϯύΠϧ͢Δ ʢʣ࠷΋஗͍ؔ਺ ௕͍ؔ਺ ͷίϯύΠϧ࣌ؒͷվળ ʢʣίϯύΠϥͷ࢒ΓͷγϦΞϧͳ෦෼Λߴ଎Խ͢Δ ʢʣେ͖ͳࣗಈੜ੒ؔ਺ JOJU Λখ͞ͳ΋ͷʹࣗಈతʹ෼ׂ͢Δ ύϑΥʔϚϯεվળ

  31. 'MBUUͰ͸(PΛॻ͘஥ؒΛืू͍ͯ͠·͢ qBUUUW

  32. ,PLJ*EF !OJDPOFHPUP 'MBUU*OD TPQIPNPSFPGUIF6OJWFSTJUZPG5PLZP