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

OSS Performance Tuning Tips

orisano
October 28, 2019

OSS Performance Tuning Tips

orisano

October 28, 2019
Tweet

More Decks by orisano

Other Decks in Programming

Transcript

  1. OSS
    Performance Tuning
    Tips
    #gocon #gocon_hall GoCon 2019 Autumn
    @orisano

    View full-size slide

  2. ໨త
    ̎ͭͷ͜ͱΛڞ༗͍ͨ͠

    View full-size slide

  3. νϡʔχϯάΛͲ͏ਐΊΔͷ͔
    Ҿ͖ग़͠Λ૿΍͢

    View full-size slide

  4. νϡʔχϯάΛͲ͏ਐΊΔͷ͔
    Ҿ͖ग़͠Λ૿΍͢

    View full-size slide

  5. Ͳ͏ਐΊ͍ͯΔͷ͔

    View full-size slide

  6. 0. ෆຬͷϋʔυϧΛԼ͛Δ

    View full-size slide

  7. ෆຬ͕
    վળͷ͖͔͚ͬʹͳΓ·͢

    View full-size slide

  8. ීஈ࢖͍ͬͯΔ
    ϥΠϒϥϦɺιϑτ΢ΣΞ͕
    ஗͍΋ͷͩͱࢥͬͯΈΔ

    View full-size slide

  9. ͖͔͚ͬͱ
    ϞνϕʔγϣϯΛ
    ࣗΒ࡞Γग़͠·͠ΐ͏

    View full-size slide

  10. 1. ܭଌͷϋʔυϧΛԼ͛Δ

    View full-size slide

  11. ஗͍ݪҼΛ
    ؾܰʹ
    ௐ΂ΒΕΔೳྗΛ਎ʹ͚ͭΔ

    View full-size slide

  12. ख͕͔͔ؒΔߦҝΛ
    ਓؒ͸͋·Γ͠ͳ͍

    View full-size slide

  13. ͨ͘͞Μܦݧ͢Δ

    View full-size slide

  14. ؾܰʹ
    ௐࠪͰ͖ΔΑ͏ͳ࢓૊ΈΛ
    ೖΕΔ

    View full-size slide

  15. ͜Ε͸OSSΛެ։͢Δଆͷ࿩
    ؀ڥม਺Ͱࢦఆͨ͠Γ
    σϑΥϧτͰprofile͕औΕΔ
    ࢓૊ΈΛఏڙ͢Δͱ
    վળ͠΍͍͢/͞Ε΍͍͢

    View full-size slide

  16. ໰୊ʹૺ۰ͨ͠ਓ͕
    ݪҼௐࠪ͠΍͍͢ͱخ͍͠

    View full-size slide

  17. 2. ໰୊ՕॴΛಛఆ͢Δ

    View full-size slide

  18. ஗͍ͱײͯ͡
    ໰୊Օॴ͕ؔ਺ϨϕϧͰ
    Θ͔Βͳ͍ͷ͸
    cliΛ࣮ߦ͍ͯ͠Δͱ͖

    View full-size slide

  19. mainʹ
    github.com/pkg/profile
    Λ௥Ճͯ͠ΈΔ

    View full-size slide

  20. cliͷ࣮ߦ͕1౓ʹ
    1࣌ؒҎ্͔͔Δ৔߹ͳͲ͸
    net/http/pprofͷ΄͏͕
    ྑ͍৔߹΋

    View full-size slide

  21. profileΛݟͯ
    ؔ਺ϨϕϧͰಛఆ͢Δ

    View full-size slide

  22. pprofͷweb൛ʹ׳ΕΔ
    ͪΌΜͱҙຯ͕Θ͔Δ

    View full-size slide

  23. ͍ΖΜͳݟํͰݟͯΈΔ
    top, graph, flame-graph
    source, disasm

    View full-size slide

  24. 3. BenchmarkΛॻ͘

    View full-size slide

  25. ͢Ͱʹॻ͍ͯ͋Δ৔߹͸
    ϥοΩʔ
    ஗͘ͳ͍ͬͯͳ͍৔߹͸
    ஗͘ͳΔέʔεΛ௥Ճ͢Δ

    View full-size slide

  26. BenchmarkΛॻ࣌͘͸
    ࠷దԽͰফ͍͑ͯͳ͍͔֬ೝ

    View full-size slide

  27. BenchmarkΛॻ͘ͱ
    ؆୯ʹprofile͕औΕΔ

    View full-size slide

  28. go test -cpuprofile
    go test -memprofile
    Λ֮͑Α͏
    (go help testflagΛಡ΋͏)

    View full-size slide

  29. 4. ղܾࡦΛߟ͑Δ

    View full-size slide

  30. Ͳ͏ղܾ͢Δ͔ʹ͍ͭͯ͸
    “Ҿ͖ग़͠Λ૿΍͢”Ͱ

    View full-size slide

  31. OSSͷ
    ύϑΥʔϚϯενϡʔχϯά
    ͸Ϛʔδ͞Εͯ׬ྃ

    View full-size slide

  32. Ͳ͏΍Ε͹Ϛʔδ͞ΕΔ
    ύονʹͳΔ͔

    View full-size slide

  33. Ϛʔδ͢Δͱ͍͏͜ͱ͸
    ૬ख͕ϝϯςφϯε͢Δ
    ͱ͍͏͜ͱ

    View full-size slide

  34. มߋ͕গͳ͍
    ૬खͷίετΛ૿΍͞ͳ͍

    View full-size slide

  35. ഁյతมߋ͕ͳ͍
    ޿͘࢖ΘΕ͍ͯΔ΋ͷ΄Ͳ
    ॏཁͳͱ͜Ζ

    View full-size slide

  36. ҟৗͳίετ͕ͳ͍
    มߋ, อक͕೉͘͠ͳΔ࣮૷
    (ΞηϯϒϥΛ࢖ͬͨΓ)

    View full-size slide

  37. ґଘؔ܎Λ௥Ճ͢Δ৔߹͸
    ৻ॏʹબ୒͢Δ
    ΞΫςΟϒʹϝϯςφϯε͞
    Ε͍ͯΔ΋ͷ͔
    ຊ౰ʹඞཁ͔?

    View full-size slide

  38. ͘͢͝ύϑΥʔϚϯε͕
    վળ͢Δ
    ܶతͳվળ͸ड͚ೖΕΒΕΔ

    View full-size slide

  39. ςετ͕ॻ͍ͯ͋Δ
    ͢Ͱʹॻ͍ͯ͋Δ৔߹͸डཧ
    ͞Ε΍͍͢

    View full-size slide

  40. 5. ࢼߦࡨޡ͢Δ

    View full-size slide

  41. ·ͣॳظঢ়ଶͰ
    े෼ͳճ਺
    timeoutʹͳΒͳ͍Α͏ʹ
    Benchmark݁ՌΛऔ͓ͬͯ͘

    View full-size slide

  42. go test -bench .
    -count=10
    -timeout=30000s
    | tee old.txt

    View full-size slide

  43. ύονΛૹΔͱ͖ʹ
    benchstatͷ݁ՌΛૹΔͷͰ
    ϕʔεϥΠϯ͸े෼ͳճ਺Ͱ

    View full-size slide

  44. timeout͸
    σϑΥϧτͩͱ10mͰ
    ҙ֎ͱΦʔόʔ͢Δ

    View full-size slide

  45. ղܾࡦΛࢥ͍͍ͭͨΒ
    ·ͣ͸1౓Benchmark

    View full-size slide

  46. ے͕ྑͦ͞͏ͳΒ
    े෼ͳճ਺Benchmark

    View full-size slide

  47. ଟ͘ࢼߦࡨޡ͍ͯ͠Δͱ
    profileͱsourceͷؔ܎͕
    Θ͔Βͳ͘ͳΔ

    View full-size slide

  48. pprofʹ͸
    sourceΛݟΔػೳ͕͋Δ͕
    อ͍࣋ͯ͠ΔΘ͚Ͱ͸ͳ͍
    pathͷΈ

    View full-size slide

  49. git add .
    git commit -m “$2”
    REV=$(git rev-parse HEAD)
    go test -bench $1 -benchmem -cpuprofile
    cpu.${REV}.pb.gz -memprofile mem.$
    {REV}.pb.gz | tee ${REV}.txt
    rm ./${REV}.* && git reset HEAD^

    View full-size slide

  50. source͸gitʹ؅ཧͯ͠΋Β͏
    ͪΌΜͱඥ෇͚ΒΕΔ

    View full-size slide

  51. ଟ͘ͷprofile͕͋Δͱ
    ୯ମͷޮՌ͕Θ͔Βͳ͍
    ͜ͱ͕͋Δ

    View full-size slide

  52. go tool pprof -diff_base
    Ͱprofileؒͷࠩ෼͕ݟΕΔ

    View full-size slide

  53. 6. ύονΛૹΔ

    View full-size slide

  54. ࠷ऴͷBenchmarkΛ
    े෼ͳճ਺ߦ͏

    View full-size slide

  55. ઐ༻ͷΠϯελϯεͰܭଌ
    ೉͍͠৔߹͸
    ۃྗ֎෦ϓϩηεΛఀࢭ͢Δ

    View full-size slide

  56. νϡʔχϯάΛͲ͏ਐΊΔͷ͔
    Ҿ͖ग़͠Λ૿΍͢

    View full-size slide

  57. ࣮ྫϕʔεͰ
    ͲͷΑ͏ʹղܾ͔ͨ͠
    ࣗ෼ͳΒͲ͏ղܾ͢Δ͔
    ߟ͑ͯ΋Β͍͍ͨ

    View full-size slide

  58. 1. ࣮ࡍʹ౤͛ͨύον
    2. ଎͍ϥΠϒϥϦ͕ॻ͖͍ͨ

    View full-size slide

  59. 1. ࣮ࡍʹ౤͛ͨύον
    2. ଎͍ϥΠϒϥϦ͕ॻ͖͍ͨ

    View full-size slide

  60. src-d/go-git

    View full-size slide

  61. pure-goͰ
    gitͷૢ࡞Λ͢ΔͨΊͷ
    ϥΠϒϥϦ

    View full-size slide

  62. ύονΛૹͬͨഎܠ

    View full-size slide

  63. aquasecurity/trivy
    Ͱ౰ॳ࢖͍͕ͬͯͨ
    େ͖ͳrepositoryͷcloneʹ
    ҟৗͳ࣌ؒ(10min~)͕͔͔Δ
    ໰୊͕͋ͬͨ

    View full-size slide

  64. ݪҼ͸
    gitͷIndexͷߏஙΛߦ͏Օॴ
    ͩͬͨ

    View full-size slide

  65. Indexͷ಺෦දݱ(public)͕
    sliceʹͳ͓ͬͯΓ
    nameͰҰҙʹ͢ΔͨΊʹ
    deleteͱappend͕
    ϑΝΠϧ਺ճ࣮ߦ͞Ε͍ͯͨ

    View full-size slide

  66. delete͸nameΛࢦఆͯ͠
    ࡟আ͢ΔͷͰ
    sliceͷཁૉΛ͢΂ͯ૸ࠪ͢Δ

    View full-size slide

  67. ౰ॳ͸
    ಺෦දݱΛmapʹมߋ͢Ε͹
    deleteͷܭࢉྔΛݮΒͤΔ
    ͷͰͦ͏͠Α͏ͱࢥͬͨ

    View full-size slide

  68. ͔͠͠
    publicͳϑΟʔϧυ
    internalͰͳ͍ύοέʔδ
    4500 star௒͑ͷ஌໊౓

    View full-size slide

  69. ౸ఈड͚ೖΕΒΕͳ͍
    มߋͩͱࢥ͍ఘΊͨ

    View full-size slide

  70. ιʔείʔυΛ
    ݟ௚͍ͯ͠Δͱ

    View full-size slide

  71. ໌ه͞Ε͍ͯΔ
    ϑΟʔϧυͷ࢓༷
    (sliceͷॱং͸อূ͠ͳ͍)
    େྔͷIndexΛߏங͢Δ
    λΠϛϯά(clone࣌)

    View full-size slide

  72. ݟ௚ͨ݁͠Ռ
    ഁյతมߋແ͠Ͱ
    मਖ਼͢Δํ๏Λࢥ͍͍ͭͨ

    View full-size slide

  73. ଟ͘ݺͼग़͞ΕΔՕॴ
    ͷΈʹ͓͍ͯ
    mapͰอ࣋͠return͢Δࡍʹ
    sliceʹม׵͢Δ

    View full-size slide

  74. mapΛprivateͳؔ਺Ͱ
    Ҿ͖ճ͢Α͏ʹ͢Δ͜ͱͰ
    ഁյతมߋΛճආͰ͖ͨ

    View full-size slide

  75. ͦ͜Λղܾ͢Δͱ
    mallocgc͕ॏ͘ͳͬͨ

    View full-size slide

  76. ϝϞϦ࢖༻ྔͷݪҼ͸
    io.Copyʹ͋ΔΑ͏ͩͬͨ

    View full-size slide

  77. ϑΝΠϧ͝ͱʹio.Copy͕
    ݺ͹Ε͍ͯͨ

    View full-size slide

  78. େྔʹݺ͹ΕΔՄೳੑ͕͋Δ
    ՕॴͰ͸io.CopyͰ͸ͳ͘
    io.CopyBufferΛ࢖͏ͱ
    ϝϞϦ࢖༻ྔΛ੍ޚͰ͖Δ

    View full-size slide

  79. ࢖͏bufferΛͲ͏ࢦఆ͢Δ͔
    ֎෦͔Β༩͑ΒΕͳ͍ͱ
    ݁ہϝϞϦ࢖༻ྔมΘΒͳ͍

    View full-size slide

  80. privateͳϝιουͱ͸͍͑
    Ҿ਺ʹ௥Ճ͢Δͱ
    มߋൣғ͕େ͖͘ͳΔ

    View full-size slide

  81. ղܾࡦͱͯ͠
    globalʹsync.PoolΛ
    ஔ͘͜ͱʹͨ͠

    View full-size slide

  82. https://github.com/src-d/
    go-git/pull/1179

    View full-size slide

  83. 605ඵ -> 249ඵ

    View full-size slide

  84. ͔͠͠
    ·ͩ·ͩϝϞϦ࢖༻ྔ͕ଟ͍
    56 GB/op

    View full-size slide

  85. ϑΝΠϧʹࠩ෼Λద༻͢Δ
    ॲཧ͕ϝϞϦΛେྔʹ࢖༻

    View full-size slide

  86. ؔ਺಺෦Ͱ͸
    publicͷؔ਺Ͱ
    buffer͕֎෦͔Β౉ͤͳ͍
    ΋ͷ͕࢖ΘΕ͍ͯͨ

    View full-size slide

  87. গͳ͘ͱ΋಺෦͔Βͷ࢖༻
    Ͱ͸bufferΛࢦఆ͍ͨ͠

    View full-size slide

  88. ಺෦޲͚ʹbufferࢦఆͰ͖Δ
    Α͏ʹͯ͠ղܾ

    View full-size slide

  89. https://github.com/src-d/
    go-git/pull/1180

    View full-size slide

  90. 56.1 GB -> 29.8 GB

    View full-size slide

  91. ύονΛૹͬͨഎܠ

    View full-size slide

  92. ࣾ಺ISUCONͰ
    QRίʔυΛߴ଎ʹੜ੒͢Δ
    ඞཁ͕͋ͬͨͨΊ

    View full-size slide

  93. ࣾ಺ISUCONͷৼΓฦΓͰ
    ύϑΥʔϚϯενϡʔχϯά
    ΛҰਓͰָ͠ΜͰ͍ͨ

    View full-size slide

  94. ߴ଎ʹେྔͷpngΛ
    ग़ྗ͢ΔͨΊʹ͸

    View full-size slide

  95. 1.9͔Βೖͬͨ
    png.EncoderBufferPool

    View full-size slide

  96. CompressionLevelͷઃఆ

    View full-size slide

  97. ಠࣗimage.Image࣮૷Λ
    ࢖Θͳ͍

    View full-size slide

  98. നࠇը૾Ͱ͋Ε͹
    image.GrayΛ࢖͏
    (Opaque͕bypassͰ͖Δ)

    View full-size slide

  99. ऄ଍ऴྃ

    View full-size slide

  100. image/png͕
    bottleneckʹͳ͖ͬͯͨ

    View full-size slide

  101. ͢ͰʹBenchmark͕
    ॻ͔Ε͍ͯͨͷͰ࣮ߦ

    View full-size slide

  102. ࠓճ࢖͍ͬͯΔ
    ՕॴͰ͸ͳ͍͕࿐ࠎʹ஗͍
    ෦෼͕͋ͬͨ

    View full-size slide

  103. https://go-
    review.googlesource.com/
    c/go/+/187417

    View full-size slide

  104. ࣮ࡍॏ͔ͬͨՕॴ͸
    compress/deflate

    View full-size slide

  105. pprof͕ॏ͍ͱࣔͨ͠ͷ͸
    for͕ॻ͔Ε͍ͯΔߦͩͬͨ

    View full-size slide

  106. ౰֘forจͷasmΛݟͯΈΔͱ
    ແବͳϝϞϦΞΫηε͕

    View full-size slide

  107. compilerʹregisterΛ
    ࢖ͬͯ΋Β͏ͨΊʹ
    ϩʔΧϧม਺Λఆٛ

    View full-size slide

  108. https://go-
    review.googlesource.com/
    c/go/+/187837

    View full-size slide

  109. GoogleContainerTools/
    kaniko

    View full-size slide

  110. ύονΛૹͬͨഎܠ

    View full-size slide

  111. ΞΠσΟΞ͕εΩͩͬͨ

    View full-size slide

  112. kanikoΛCIͰ࢖ͬͯ
    Կʹ͕͔͔͍࣌ؒͬͯΔͷ͔
    ؾʹͳͬͨ

    View full-size slide

  113. kaniko͸ϝϞϦ্ʹ
    filesystemͷsnapshotΛ࣋ͭ

    View full-size slide

  114. ίϚϯυΛ࣮ߦ͢Δͨͼʹ
    ࠩ෼͕ͳ͍͔ൺֱ͢Δ

    View full-size slide

  115. md5Ͱൺֱ͢Δ

    View full-size slide

  116. ͦͷmd5͕ॏ͔ͬͨ

    View full-size slide

  117. ϑΝΠϧ͕
    ಉҰ͔Ͳ͏͔͚ͩͰྑ͍ͷͰ
    md5Ͱ͋Δඞཁ͸ͳ͍

    View full-size slide

  118. minio/HighwayHashʹมߋ
    (ຊ౰͸Α͘ͳ͍)

    View full-size slide

  119. mount͞Ε͍ͯΔ
    σΟϨΫτϦ͸
    snapshotର৅֎

    View full-size slide

  120. ϑΝΠϧ͕whitelistʹ
    ؚ·ΕΔ൑ఆ͢ΔՕॴͰ
    strings.SplitΛ࢖༻

    View full-size slide

  121. ϑΝΠϧ਺͕ଟ͔ͬͨΓ
    directory͕ਂ͍ͱ
    ແବʹϝϞϦΛ࢖༻͢Δ

    View full-size slide

  122. ಛੑΛߟ͑ͯ
    strings.SplitNΛ࢖༻

    View full-size slide

  123. https://github.com/
    GoogleContainerTools/
    kaniko/pull/694

    View full-size slide

  124. 129.54s -> 88.29s

    View full-size slide

  125. 1. ࣮ࡍʹ౤͛ͨύον
    2. ଎͍ϥΠϒϥϦ͕ॻ͖͍ͨ

    View full-size slide

  126. orisano/wyhash

    View full-size slide

  127. kanikoͷύονΛ
    ॻ͍͍ͯΔͱ͖ʹ
    Կ͕ྑ͍hashͳͷͩΖ͏

    View full-size slide

  128. Q. ଎͍hash͸?

    View full-size slide

  129. Q. ଎͍hash͸?
    A. ܭଌ͠·͠ΐ͏

    View full-size slide

  130. dgryski/trifles/hashbench
    खݩͰ૸ΒͤͯΈ·͠ΐ͏

    View full-size slide

  131. (ݟ͔ͭΒͳ͍package͕
    ͋ΔͷͰಈ͖·ͤΜ)

    View full-size slide

  132. wyhash͕
    GitHubͷTrendingͰ
    ্͕͖ͬͯͨ

    View full-size slide

  133. ଎ͯ͘ϙʔλϒϧͰڧ͍
    Β͍͠

    View full-size slide

  134. ඇৗʹ୯७ͳͷͰ
    GoʹҠ২ͯ͠ΈΑ͏ͱࢥͬͨ

    View full-size slide

  135. 2೔ҐͰҠ২͕ऴྃ

    View full-size slide

  136. hashbenchʹ௥Ճ
    ֬ೝ͢ΔͱϘϩෛ͚͍ͯ͠Δ

    View full-size slide

  137. ͜Μͳܭࢉ͔͠ͳ͍ॲཧΛ
    Ͳ͏΍ͬͯߴ଎Խ͢Δͷ͔

    View full-size slide

  138. ྨࣅϥΠϒϥϦͷௐࠪ

    View full-size slide

  139. ҉߸ܥ΍hashܥ͸
    جຊతʹasm͕࢖ΘΕ͍ͯΔ

    View full-size slide

  140. asmΛ࢖͏ͱ଎͍?

    View full-size slide

  141. ॻ͍ͯΈΑ͏

    View full-size slide

  142. Go asm͸ಠಛͳײ͡
    ॻ͍͍ͯΔ೔ຊਓ͕
    ΄ͱΜͲ͍ͳ͍?
    ͋·Γࢿྉ͕ͳ͍

    View full-size slide

  143. ؤுͬͯ
    AVXΛ࢖ͬͯॏ͍ॲཧΛॻ͘

    View full-size slide

  144. lldbΛ࢖ͬͯ
    bug(SEGV)Λमਖ਼͢Δ

    View full-size slide

  145. Benchmark݁Ռ
    ஗͘ͳ͍ͬͯΔ

    View full-size slide

  146. asmͰॻ͍ͨؔ਺͸
    inlineԽ͞Εͳ͍

    View full-size slide

  147. math/bits
    encoding/binary
    ίϯύΠϥ͕ݡ͘࠷దԽ͢Δ
    https://dave.cheney.net/
    2019/08/20/go-compiler-
    intrinsics

    View full-size slide

  148. inlineԽ͞ΕΔΑ͏ͳ
    খ͞ͳؔ਺͸
    asmͷޮՌ͕ಘΒΕͳ͍

    View full-size slide

  149. ࠓճͷΑ͏ͳ৔߹ͩͱ
    loop·ͰؚΊͯasmԽ͢΂͖

    View full-size slide

  150. ෆ׳ΕͳasmͰ
    ଟ͘ͷίʔυΛॻ͖ͨ͘ͳ͍

    View full-size slide

  151. mmcloughlin/avo
    Λ࢖͓͏

    View full-size slide

  152. GoͰasmΛੜ੒͢Δ
    ϓϩάϥϜΛॻ͘Ξϓϩʔν

    View full-size slide

  153. Կ͕ྑ͍͔?

    View full-size slide

  154. Go asmͷ͓࡞๏Λ
    avo͕΍ͬͯ͘ΕΔ

    View full-size slide

  155. Go IDEͰͷิ׬͕ޮ͘

    View full-size slide

  156. avoΛ࢖ͬͯؤுͬͨ
    5 GB/s -> 11 GB/s

    View full-size slide

  157. ߴ଎ͳasmΛॻ͘ͷ͕೉͍͠

    View full-size slide

  158. asmϨϕϧͰͳͥ஗͍ͷ͔
    pprofͰ͸Θ͔Βͳ͍

    View full-size slide

  159. ύΠϓϥΠχϯάΛҙࣝ͢Δ
    11 GB/s -> 14 GB/s

    View full-size slide

  160. νϡʔχϯάΛͲ͏ਐΊΔͷ͔
    • 0. ෆຬͷϋʔυϧΛԼ͛Δ
    • 1. ܭଌͷϋʔυϧΛԼ͛Δ
    • 2. ໰୊ՕॴΛಛఆ͢Δ
    • 3. BenchmarkΛॻ͘

    View full-size slide

  161. νϡʔχϯάΛͲ͏ਐΊΔͷ͔
    • 4. ղܾࡦΛߟ͑Δ
    • Ϛʔδ͞Ε΍͍͢ղܾࡦΛ໨ࢦ͢
    • ϝϯςφϯείετΛ্͛ͳ͍΋ͷ
    • 5. ࢼߦࡨޡ͢Δ
    • 6. ύονΛૹΔ

    View full-size slide

  162. Ҿ͖ग़͠Λ૿΍͢
    • ϝϞϦ࢖༻ྔ͸໰୊ʹͳΓ͕ͪ
    • ֎෦͔ΒBuffer͕ड͚औΕΔAPIΛߟྀ͢Δ
    • มߋ͕༰қͰ͸ͳ͍৔߹sync.PoolΛߟྀ͢Δ

    View full-size slide

  163. Ҿ͖ग़͠Λ૿΍͢
    • ద੾ͳhashΛબ୒͢Δ
    • Ξηϯϒϥ͸ϝϯςφϯείετ͕ߴ͍ͷͰ
    ۃྗආ͚Δ
    • ॏ͍ॲཧͷ෦෼͚ͩσʔλͷ࣋ͪํΛม͑ͯ
    ΈΔ

    View full-size slide