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

知っているようで知らないWebサーバアーキテクチャ

 知っているようで知らないWebサーバアーキテクチャ

第6回ゲームサーバ勉強会用資料です。
Webの技術の根幹となるHTTPやTCP/IPを軽くおさらいしたあと、
マルチプロセス、マルチスレッド、イベント駆動といったサーバアーキテクチャについて解析し、
さらにイベント駆動を実現するための非ブロッキングI/OとI/Oの多重化について解説します。

Yuki Tamura

May 21, 2017
Tweet

More Decks by Yuki Tamura

Other Decks in Technology

Transcript

  1. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    %&-J()5803,4*OD
    ஌͍ͬͯΔΑ͏Ͱ஌Βͳ͍

    8FCαʔόΞʔΩςΫνϟ
    ୈ̒ճήʔϜαʔόษڧձ

    View Slide

  2. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ࣗݾ঺հ
    ాଜ༞थʢUXJUUFS!JTPQBSBNFUSJD

    σΟϥΠτϫʔΫεגࣜձࣾ
    ݩʑ͸ίϯιʔϧग़਎
    ൣғ͸ΫϥΠΞϯτɺαʔόɺΠϯϑϥɺ͍Ζ͍Ζʜʜ
    ࠷ۙ͸6OJUZͷ;FOKFDUʢ%*ϑϨʔϜϫʔΫʣ͍ͬͯ͡·͢
    ޷͖ͳݴޠ͸$ͱ-VB

    View Slide

  3. ࠓ೔ͷ࿩

    View Slide

  4. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    8FCαʔό
    3%# Ϣʔβʔ
    ϩʔυ

    όϥϯα
    8FCαʔό
    8FCαʔό
    ͜ͷลΓͷ͓࿩

    View Slide

  5. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ୅දతͳ8FCαʔό

    View Slide

  6. ࢮʹ
    ࢸΔ
    ࡸͦ
    ͠
    ͯ
    ɺ

    ұ

    View Slide

  7. αʔό͕
    ॏ͍Ͱ͢ʂ
    ໰୊ൃੜʂʂʂ

    View Slide

  8. Α͘஌Βͳ͍ਓ

    ʮαʔό͕ॏ͚Ε͹

    ୆਺Λ૿΍ͤ

    ͹͍͍͡Όͳ͍ʯ

    View Slide

  9. ຊ౰ʹʁ

    View Slide

  10. 8FCαʔό
    3%#
    8FCαʔό
    8FCαʔό
    8FCαʔό
    8FCαʔό
    8FCαʔό
    8FCαʔό
    8FCαʔόΛ૿΍͢ͱ
    3%#΁ͷ઀ଓ͕૿େ͠
    ো֐͕ൃੜ͢Δ͜ͱ΋
    %#΁ͷ઀ଓ
    ଟ͗͢໰୊

    View Slide

  11. %#͕աෛՙͰԠ౴͕ฦͤͳ͍
    Ԡ౴͕ฦΒͳ͍ͷͰ8FCαʔόͷ

    ॲཧ͕ऴΘΒͳ͍
    8FCαʔόͷॲཧ͕ऴΘΒͳ͍··

    ࣍ʑͱ৽͍͠ΞΫηε͕དྷΔ
    ࠷ޙʹ͸8FCαʔό͕٧·Δ

    ಥવͷࢮʂʂʂ

    View Slide

  12. %#ͷεέʔϧΞοϓ͠·͔͢ʁ

    View Slide

  13. %#ͷ࠷దԽ͠·͔͢ʁ

    View Slide

  14. Ͱ͕͢ɺࠓճ͸8FCαʔόͷ͓࿩Ͱ͢

    View Slide

  15. Ͳ͏ͯ͠ʁ

    View Slide

  16. ໰୊ͷ੾Γ෼͚͕େ੾

    View Slide

  17. ͋Γ·͢͜Μͳো֐
    %#ʹ઀ଓͨ͠··

    8FCαʔόͰ໓஡ۤ஡ॏ͍ॲཧͰ٧·Δ
    %#͸ۭ͍ͯͯ8FCαʔό΋਺ଟ͋͘Δͷʹ

    ผͷαʔόʗγεςϜʹܨ͍Ͱ͍Δͷ͕ॏ͍
    αʔόΩϟογϡ͕/P42-ʹ͋ͬͯ

    Կ౓΋઀ଓͯͯ͠8FCαʔό͕໓஡ۤ஡ॏ͍
    GPSจͷதͰωοτϫʔΫ઀ଓʜʜ
    42-ͰաڈશͯͷσʔλΛᢞΊͯΔʜʜ

    View Slide

  18. 8FCαʔό
    3FEJT
    NFNDBDIFE
    ܾࡁγεςϜ
    .Z42-
    ೝূγεςϜ
    ͲΕ΋
    ॏ͍ΜͰ͢

    View Slide

  19. ໐Γ·͘
    Δɺ
    ి
    ࿩ ୈ


    View Slide

  20. 8FCαʔόͬͯ

    View Slide

  21. Ͳ͏΍ͬͯಈ͘ͷ͔
    આ໌Ͱ͖·͔͢ʁ

    View Slide

  22. ଟ͘ͷਓͷೝࣝ

    View Slide

  23. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    Ϣʔβʔ
    8FC
    ϑϨʔϜ

    ϫʔΫ
    3FRVFTU
    ͝ʹΐ͝ʹΐ
    ॲཧ͢Δ
    3FTQPOTF
    Ϣʔβʔ
    ͳΜ͔ͩ͜Μͳײ͡ʁ
    ϦΫΤετདྷͯ
    Ϩεϙϯεฦ͢ͷͰ͸ʁ

    View Slide

  24. ؒҧͬͯ͸͍·ͤΜ

    View Slide

  25. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE

    )551ͰϦΫΤετΛड৴͢Δ

    )551ϔομΛύʔε͢Δ

    ΞϓϦέʔγϣϯଆͰద੾ͳϋϯυϥΛݺͼग़͢

    ήʔϜͷॲཧΛ࣮ߦ͢Δʢ%#ͱ͔΋͍͡Δʣ

    ςϯϓϨʔτΤϯδϯͳͲΛ࢖ͬͯϨεϙϯεΛฦ͢
    جຊ͸͜Ε͚ͩ
    8FCαʔόͷ໾ׂ

    View Slide

  26. ͳΜͩ؆୯͡Όͳ͍͔

    View Slide

  27. Ͱ͸ɺ)551ͬͯ
    ͳΜͰ͠ΐ͏͔ʁ

    View Slide

  28. )ZQFSUFYU
    5SBOTGFS
    1SPUPDPM

    View Slide

  29. ϋΠύʔςΩετ

    సૹϓϩτίϧ

    View Slide

  30. ϋΠύʔςΩετΛసૹ͢Δʁ

    View Slide

  31. ςΩετΛ௒͑ͨςΩετʁ

    View Slide

  32. ͋Εʁը૾΋సૹͯ͠ͳ͍ʁ

    View Slide

  33. ࠓճ͸վగ൛)551Λ
    ݩʹ͓࿩͠·͢
    ʢ࠷৽͸)551ʣ

    View Slide

  34. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    3'$ 3FRVFTU'PS$PNNFOU
    ᐌ͘
    )551͸ɺ෼ࢄܕͷڠௐతͳ

    ϋΠύʔςΩετ৘ใγεςϜͷͨΊͷɺ

    εςʔτϨεͳ

    ΞϓϦέʔγϣϯϨϕϧͷϓϩτίϧͰ͋Δ

    View Slide

  35. ͳΔ΄Ͳݴ͍ͬͯΔ

    ҙຯ͕Θ͔ΒΜ

    View Slide

  36. )551͸ɺ

    ʦґڌՄೳͳ

    ʦτϥϯεϙʔτ૚΍ηογϣϯ૚ʧͷ

    ઀ଓʹ·͕ͨͬͯɼϝοηʔδΛަ׵͢Δʧ

    ͜ͱʹΑΓӡ༻͞ΕΔɼ

    εςʔτϨεͳʦཁ੥ʗԠ౴ʧϓϩτίϧͰ͋Δɻ
    3'$

    ΫϥΠΞϯτʗαʔόʹΑΔϝοηʔδॲཧ

    View Slide

  37. ɾ)551ΫϥΠΞϯτͱ͸ɺ

    ɹҰͭҎ্ͷ)551ཁ੥Λૹ৴͢Δ໨తͰɼ

    ɹαʔό΁ͷ઀ଓΛཱ֬͢ΔϓϩάϥϜͰ͋Δ
    ɾ)551αʔόͱ͸ɺ)551ཁ੥ʹର͠ɼ

    ɹͦͷ઀ଓΛड༰͠ɼ

    ɹΫϥΠΞϯτ΁ͷαʔϏεͱͯ͠ɼ

    ɹ)551Ԡ౴Λૹ৴͢ΔϓϩάϥϜͰ͋Δɻ
    ˝ྫ͑͹ɺήʔϜϓϩάϥϜͳͲ
    ˛ྫ͑͹ɺ8FCαʔόͳͲ

    View Slide

  38. ͨͩ͠ɺೋͭͷ༻ޠͰ͋Δ

    lΫϥΠΞϯτzɺlαʔόz͕ࢦ͢ͷ͸ɺ
    ͋Δಛఆͷ઀ଓͷͨΊʹɺ

    ͜ΕΒͷϓϩάϥϜ͕਱ߦ͢Δ໾ׂͷΈʹݶΒΕΔͷͰ
    ͋Δ઀ଓ্Ͱ͸ΫϥΠΞϯτʹͳΔͱಉ࣌ʹɺ

    ଞͷ઀ଓ্Ͱ͸αʔόͱͯ͠ಈ࡞͠ಘ·͢ɻ
    ʢαʔόʔͱΫϥΠΞϯτ͸ಉ࣌ʹ
    ɹΫϥΠΞϯτͱαʔόʔͰ΋͋ΓಘΔΑͱ͍͏͜ͱʣ

    View Slide

  39. ΄ͱΜͲͷ)551௨৴͸ɺ

    ʦ63*ʹΑΓࣝผ͞ΕΔԿΒ͔ͷϦιʔεʧͷ

    දݱʹର͢Δɼ

    ݕࡧऔಘཁ੥ʢ(&5ʣ͔ΒͳΔɻ
    3'$

    ΫϥΠΞϯτʗαʔόʹΑΔϝοηʔδॲཧ

    View Slide

  40. 6OJGPSN

    3FTPVSDF

    *EFOUJGJFS

    View Slide

  41. 63*͸ɺந৅త͋Δ͍͸෺ཧతͳϦιʔεΛࣝผ͢ΔͨΊ
    ͷ؆ܿͳจࣈྻͰ͋Δɻ
    6OJGPSN౷Ұॻࣜ
    3FTPVSDFϦιʔε

    *EFOUJGJFSࣝผࢠ

    View Slide

  42. ʲ౷Ұॻࣜʳ

    ҰఆͷॻࣜΛѻ͏͜ͱɻ
    ʲϦιʔεʳ
    ओʹిࢠจॻɺը૾ɺ৘ใݩɺαʔϏεͳͲΛࢦ͕͢ɺ
    ਓؒ΍اۀɺਤॻؗͷॻ੶ͳͲ෺ཧతͳ΋ͷɺ
    ํఔࣜɺԋࢉࢠɺ਺஋ͱ͍ͬͨந৅త֓೦΋ࢦͤΔɻ
    ʲࣝผࢠʳ
    ༷ʑͳର৅͔ΒಛఆͷҰͭΛࣝผ͢ΔͨΊͷ΋ͷɻ

    View Slide

  43. (&5ͷྫ

    View Slide

  44. GET /hello.txt HTTP/1.1
    User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
    Host: www.example.com
    Accept-Language: en, mi
    HTTP/1.1 200 OK
    Date: Mon, 27 Jul 2009 12:28:53 GMT
    Server: Apache
    Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
    ETag: "34aa387-d-1568eb00"
    Accept-Ranges: bytes
    Content-Length: 51
    Vary: Accept-Encoding
    Content-Type: text/plain
    Hello World! My payload includes a trailing CRLF.
    (&5ʹΑΔΫϥΠΞϯτͷཁ੥
    (&5ͷཁ੥ʹର͢Δαʔό͔ΒͷԠ౴

    View Slide

  45. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ͪΌΜͱ)551஌Γ͍ͨͳΒ
    3'$ )551

    3'$ʙ վగ൛)551

    3'$ )551

    3'$ 63*

    Λಡ΋͏

    View Slide

  46. ɺ
    ݟ

    Β
    ͵
    ୈࢀ࿩
    ࢓༷

    View Slide

  47. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    3'$ 3FRVFTU'PS$PNNFOU
    ᐌ͘
    )551͸ɺ෼ࢄܕͷڠௐతͳ

    ϋΠύʔςΩετ৘ใγεςϜͷͨΊͷɺ

    εςʔτϨεͳ

    ΞϓϦέʔγϣϯϨϕϧͷϓϩτίϧͰ͋Δ

    View Slide

  48. )551͸εςʔτϨε
    Ͳ͏͍͏ҙຯͩΖ͏ʁ

    View Slide

  49. εςʔτϑϧ
    εςʔτϨε

    View Slide

  50. ɹ٬ɿʮ͜Μʹͪ͸ʯ
    ళһɿʮ͍Βͬ͠Ό͍·ͤɺϚΫυόʔΨʔ΁Α͏ͦ͜ʯ
    ɹ٬ɿʮϏοάϚΫυηοτɺ͓ئ͍͠·͢ʯ
    ళһɿʮαΠυϝχϡʔ͸͍͔͕͠·͔͢ʁʯ
    ɹ٬ɿʮϙςτͰʯ
    ళһɿʮυϦϯΫ͸Կʹͳ͍͞·͔͢ʯ
    ɹ٬ɿʮΞΠείʔώʔͰʯ
    ళһɿʮʴ̎̌ԁͰαΠζΛ̡ʹͰ͖·͕͢ʁʯ
    ɹ٬ɿʮ͡Όɺ̡ʹ͍ͯͩ͘͠͞ʯ

    ళһɿʮҎ্ͰΑΖ͍͠Ͱ͔͢ʁʯ

    ɹ٬ɿʮ͸͍ʯ
    ళһɿʮ͔͜͠·Γ·ͨ͠ɻ˓˓ԁʹͳΓ·͢ʯ
    εςʔτϑϧόʔΨʔγϣοϓ
    ࢀߟɿࢁຊཅฏ
    ʰ8FCΛࢧ͑Δٕज़ʱ

    View Slide

  51. ɹ٬ɿʮ͜Μʹͪ͸ʯ
    ళһɿʮ͍Βͬ͠Ό͍·ͤɺϚΫυόʔΨʔ΁Α͏ͦ͜ʯ
    ɹ٬ɿʮϏοάϚΫυηοτɺ͓ئ͍͠·͢ʯ
    ళһɿʮαΠυϝχϡʔ͸͍͔͕͠·͔͢ʁʯ
    ɹ٬ɿʮϏοάϚΫυηοτʹϙςτͰʯ
    ళһɿʮυϦϯΫ͸Կʹͳ͍͞·͔͢ʯ
    ɹ٬ɿʮϏοάϚΫυηοτʹϙςτͱΞΠείʔώʔͰʯ
    ళһɿʮʴ̎̌ԁͰαΠζΛ̡ʹͰ͖·͕͢ʁʯ
    ɹ٬ɿʮϏοάϚΫυηοτʹϙςτͱΞΠείʔώʔʢ̡ʣͰʯ

    ళһɿʮҎ্ͰΑΖ͍͠Ͱ͔͢ʁʯ

    ɹ٬ɿʮϏοάϚΫυηοτʹϙςτͱΞΠείʔώʔʢ̡ʣͰɻҎ্Ͱ͢ʯ
    ళһɿʮ͔͜͠·Γ·ͨ͠ɻ˓˓ԁʹͳΓ·͢ʯ
    εςʔτϨεόʔΨʔγϣοϓ
    ࢀߟɿࢁຊཅฏ
    ʰ8FCΛࢧ͑Δٕज़ʱ

    View Slide

  52. εςʔτϨε
    ໘౗͍͘͞ͳ

    View Slide

  53. εςʔτϨε͔ͩΒ
    εέʔϧ͢Δͷͩͱͨ͠Βʁ

    View Slide

  54. ɹɹ٬ɿʮ͜Μʹͪ͸ʯ
    ళһ̖ɿʮ͍Βͬ͠Ό͍·ͤɺϚΫυόʔΨʔ΁Α͏ͦ͜ʯ
    ɹɹ٬ɿʮϏοάϚΫυηοτɺ͓ئ͍͠·͢ʯ
    ళһ̗ɿʮαΠυϝχϡʔ͸͍͔͕͠·͔͢ʁʯ
    ɹɹ٬ɿʮϏοάϚΫυηοτʹϙςτͰʯ
    ళһ̘ɿʮυϦϯΫ͸Կʹͳ͍͞·͔͢ʯ
    ɹɹ٬ɿʮϏοάϚΫυηοτʹϙςτͱΞΠείʔώʔͰʯ
    ళһ̙ɿʮʴ̎̌ԁͰαΠζΛ̡ʹͰ͖·͕͢ʁʯ
    ɹɹ٬ɿʮϏοάϚΫυηοτʹϙςτͱΞΠείʔώʔʢ̡ʣͰʯ

    ళһ̚ɿʮҎ্ͰΑΖ͍͠Ͱ͔͢ʁʯ

    ɹɹ٬ɿʮϏοάϚΫυηοτʹϙςτͱΞΠείʔώʔʢ̡ʣͰɻҎ্Ͱ͢ʯ
    ళһ̛ɿʮ͔͜͠·Γ·ͨ͠ɻ˓˓ԁʹͳΓ·͢ʯ
    εςʔτϨεόʔΨʔ͸

    ళһ͕ಉ͡Ͱͳͯ͘΋ྑ͍
    ࢀߟɿࢁຊཅฏ
    ʰ8FCΛࢧ͑Δٕज़ʱ

    View Slide

  55. εςʔτϨε͔ͩΒ
    ٬͕ߟ͑ͯΔ࣌ଞͷࣄ͕ग़དྷΔ

    View Slide

  56. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    3'$ 3FRVFTU'PS$PNNFOU
    ᐌ͘
    )551͸ɺ෼ࢄܕͷڠௐతͳ

    ϋΠύʔςΩετ৘ใγεςϜͷͨΊͷɺ

    εςʔτϨεͳ

    ΞϓϦέʔγϣϯϨϕϧͷϓϩτίϧͰ͋Δ

    View Slide

  57. ΞϓϦέʔγϣϯ૚
    τϥϯεϙʔτ૚
    Πϯλʔωοτ૚
    ϦϯΫ૚
    )551 44) '51 %)$1ͳͲ
    5$1 6%1ͳͲ
    *1 *1W *1W
    ͳͲ
    5$1*1ࢀরϞσϧ
    ΠʔαωοτͳͲ
    ίί

    View Slide

  58. )551͸5$1*1ϕʔε

    View Slide

  59. 5$1ʁ*1ʁ͓͍͍͠ʁ

    View Slide

  60. 5SBOTNJTTJPO
    $POUSPM
    1SPUPDPM
    ͱ͸ͳΜͧ΍ʁ

    View Slide

  61. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    w Ԡ౴Λඞཁͱ͢Δ
    w γʔέϯε൪߸ͱݺ͹ΕΔσʔλͷॱং͚ͮΛ࣋ͭ
    w ΫϥΠΞϯτͱαʔόͷԟ෮࣌ؒ 355SPVOEUSJQUJNF
    Λ

    ༧ଌ͢ΔΞϧΰϦζϜΛ಺แ͢Δ
    w λΠϜΞ΢τͱ࠶ૹͷ࢓૊ΈΛ࣋ͭ
    5$1ͱ͸ͲΜͳϓϩτίϧ͔ʁ

    View Slide

  62. ߴ଎͞ΑΓਖ਼͕֬͞େࣄ

    View Slide

  63. Ͳ͏ͯ͠ਖ਼֬ͳͷ͔΋͏গ͠

    View Slide

  64. ਖ਼֬ͷՁ஋͸
    ୈ࢛࿩

    View Slide

  65. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    5$1ίωΫγϣϯͷ
    ཱ֬ͱऴྃʹ͍ͭͯ

    View Slide

  66. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    XBZIBOETIBLF

    View Slide

  67. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ΫϥΠΞϯτ αʔόʔ
    TPDLFU
    DPOOFDUʢϒϩοΫʣ

    ʢΞΫςΟϒΦʔϓϯʣ
    TPDLFU CJOE MJTUFOʢύογϒΦʔϓϯʣ
    BDDFQUʢϒϩοΫʣ
    DPOOFDU͔Β໭Δ
    BDDFQU͔Β໭Δ

    SFBEʢϒϩοΫʣ
    4:/+
    4:/, BDL+
    BDL,
    αʔόʔ͸ίωΫγϣϯΛड͚෇͚Δ༻ҙΛ͢Δ

    ͜Ε͸௨ৗTPDLFUɺCJOEɺMJTUFOΛݺͼग़͢ʹύογϒΦʔϓϯ
    ΫϥΠΞϯτ͸DPOOFDUΛݺͼग़͠ΞΫςΟϒΦʔϓϯΛ࣮ߦ͢Δ

    γʔέϯε൪߸ͷॳظ஋Λ4:/ηάϝϯτͰૹ৴͢Δ
    αʔό͸4:/ʹର͢ΔԠ౴Λૹ৴͢ΔͨΊʹࣗ਎ͷ4:/ͱɺ

    ΫϥΠΞϯτͷ4:/ʹର͢ΔԠ౴ͱͳΔ"$,Λ୯Ұͷηάϝϯτͱͯ͠ૹ৴͢Δ
    ΫϥΠΞϯτ͸αʔόͷ4:/ʹԠ౴͢Δ




    BDL֬ೝԠ౴൪߸

    View Slide

  68. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    5$1ίωΫγϣϯͷཱ֬͸

    ి࿩ʹࠅࣅ͍ͯ͠Δ
    TPDLFUؔ਺ి࿩Λ༻ҙ͢Δ
    CJOEؔ਺ࣗ෼ͷి࿩൪߸Λڭ͑Δ
    MJTUFOؔ਺ண৴͕͋ͬͨͱ͖ʹݺͼग़͠ԻΛ໐Β͢
    DPOOFDUؔ਺૬खͷ൪߸͕Θ͔Ε͹͜ΕͰμΠΞϧͰ͖Δ
    BDDFQUؔ਺ड࿩ثΛऔΓ্͛Δ

    View Slide

  69. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    5$1ίωΫγϣϯͷղ์

    View Slide

  70. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ΫϥΠΞϯτPSαʔόʔ αʔόʔPSΫϥΠΞϯτ
    DMPTF

    ʢΞΫςΟϒΫϩʔζʣ
    '*/.
    BDL.
    BDL/
    ऴྃ͢Δଆ͕DMPTFΛݺͼग़͢ʹΞΫςΟϒΫϩʔζ

    σʔλͷૹ৴͕ऴྃͨ͜͠ͱΛҙຯ͢Δ'*/ηάϝϯτΛૹ৴͢Δ
    '*/Λड৴ͨ͠ଆ͸ɺύογϒΫϩʔζΛ࣮ߦɺड৴ͨ͠'*/͸5$1ʹΑͬͯ

    Ԡ౴͕ૹ৴͞ΕɺͦΕҎ্σʔλ͸ड৴͠ͳ͍ͷͰ&0'ͱͯ͠ΞϓϦʹ௨஌
    &0'ΛಡΈग़ͨ͠ΞϓϦ͕ιέοτͷDMPTFΛߦ͏

    ͜ΕʹΑΓɺ5$1͸'*/ηάϝϯτΛૹ৴͢Δ
    ࠷ޙͷ'*/Λड৴ͨ͠ଆ͸͜ͷ'*/ʹର͢ΔԠ౴Λߦ͏



    ʢύογϒΫϩʔζʣ
    SFBE͕Λฦ͢
    '*// DMPTF

    View Slide

  71. جૅதͷجૅ

    View Slide

  72. Ͱ΋ҙ֎ͱ஌Βͳ͍͜ͱ
    આ໌Ͱ͖ͳ͍͜ͱ

    View Slide

  73. ͳͥͳΒউखʹ
    ͏·͍͜ͱ΍ͬͯ͘ΕͯΔ͔Β

    View Slide

  74. ஌Βͳ͍ͱ͜ΖͰؤு͍ͬͯΔ
    ͦΕ͕̩̘̥

    View Slide

  75. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ΫϥΠΞϯτ αʔόʔ
    TPDLFU
    DPOOFDUʢϒϩοΫʣ
    TPDLFU CJOE MJTUFO
    BDDFQUʢϒϩοΫʣ
    4:/@3$7%
    &45"#-*4)&%
    DPOOFDU͔Β໭Δ
    &45"#-*4)&%
    BDDFQU͔Β໭ΔɺSFBEʢϒϩοΫʣ
    XSJUFɺSFBEʢϒϩοΫʣ ˝σʔλʢཁٻʣ
    ʻαʔό͕ཁٻΛॲཧʼ
    XSJUFɺSFBEʢϒϩοΫʣ
    ˝σʔλʢԠ౴ʣ
    ɹཁٻͷBDL
    SFBE͔Β໭Δ
    DMPTF
    '*/@8"*[email protected]
    SFBE͔Β໭Δ
    BDL֬ೝԠ౴൪߸
    Ԡ౴ͷBDL
    $-04&@8"*5
    DMPTF
    5*.&@8"*5
    $-04&%
    ͱ
    ͋
    Δ
    ̩
    ̘
    ̥
    ί
    ω
    Ϋ
    γ
    ϣ
    ϯ
    -"[email protected]"$,
    '*/@8"*[email protected]
    SFBE͕Λฦ͢
    4:/@4&/5
    -*45&/
    ͔͜͜͠
    ݟͯͳ͍

    View Slide

  76. ͡Ό̞̥͸ʁ
    *OUFSOFU
    1SPUPDPM

    View Slide

  77. ̞̥͸࠷΋جຊతͳ௨৴୯Ґ
    ύέοτΛ૬खʹૹ৴͢Δ

    View Slide

  78. ൃ৴ऀɺड৴ऀ͸
    ̞̥ʹΑͬͯಛఆ͞ΕΔ

    View Slide

  79. ̞̥͸ύέοτΛૹग़͢Δ͚ͩ

    ૬खʹಧ͔͘͸อূ͠ͳ͍

    View Slide

  80. ࣮֬ʹૹड৴͢Δ
    ඞཁ͕͋ΔͳΒ͹
    ̩̘̥ͳͲΛ
    ࢖͏ඞཁ͕͋Δ

    View Slide

  81. 5$1*1ͷ௨৴͸جຊॏ͍ɻ
    .Z42-1SPUPDPMͳͲ͸
    4PDLFU௨৴͕ͩɺ
    ͦ΋ͦ΋ωοτϫʔΫϦιʔεΛ
    සൟʹ࢖͏ͱ͍͏͜ͱ͕ॏ͍
    ͱ͍͏ೝࣝΛ࣋ͭ͜ͱɻ

    View Slide



  82. ͠
    ͨࡸͷ
    Ͱ


    ޒ࿩

    View Slide

  83. ͍Α͍Α8FCαʔόͷ͓࿩

    View Slide

  84. ̝̩̩̥ΛͲ͏ޮ཰ྑ͘
    ॲཧ͢Δ͔ʁ

    View Slide

  85. αʔό͸ԿΛͲ͏ؤுͬͯ
    ͍Δͷ͔ʁɹ

    View Slide

  86. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ΫϥΠΞϯτ αʔό
    5$1ϙʔτΛCJOEͯ͠
    MJTUFO͢Δ
    (&5)551
    )5510,
    5$1XBZIBOETIBLF
    BDDFQUͯ͠
    ৽͍͠઀ଓΛड͚ೖΕΔ
    SFBE SFDW
    Ͱ
    )551ϦΫΤετΛड͚औΔ
    ϦΫΤετΛॲཧ͢Δ
    XSJUF TFOE
    Ͱ
    )551ϨεϙϯεΛฦ͢
    DMPTFͯ͠5$1઀ଓΛ੾Δ
    ج


    ͳ
    ϓ
    ϩ
    η
    ε


    View Slide

  87. ͜ͷ··Ͱ͸εέʔϧͰ͖ͳ͍

    View Slide

  88. *0ϨϕϧͰ͸ϒϩοΫ͞ΕΔͷͰ
    SFBEXSJUFத͸ଞͷ͜ͱ͕Ͱ͖ͳ͍͔Β

    View Slide

  89. ฒߦॲཧͷํ๏͸ओʹ̏ͭ

    View Slide

  90. Ϛϧνϓϩηε
    ϚϧνεϨου
    Πϕϯτۦಈ

    View Slide

  91. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    Ϛϧνϓϩηε
    ϦΫΤετΛฒߦͰॲཧ͢ΔͨΊɺGPSLͰࢠϓϩηεΛੜ੒
    ॲཧΛࢠϓϩηεʹ೚ͤΔɻ
    GPSL͸ϝϞϦ্ͷΞυϨεۭؒΛ·Δ͝ͱผͷΞυϨεۭؒʹ
    ίϐʔ͢ΔͨΊҰൠతʹ஗͍ͱݴΘΕΔɻ
    ͕ɺ࣮ࡍʹ͸$P8 $PQZ0O8SJUF
    ͱ͍͏࢓૊ΈͰ
    ϝϞϦίϐʔͷෛՙΛ཈͑Δɻ
    $P8͸GPSL࣌ʹࢠϓϩηεͷԾ૝ΞυϨεۭؒʹ
    ਌ϓϩηεͷΞυϨεΛϚοϐϯά͠਌ࢠͰΞυϨεڞ༗͢Δɻ

    View Slide

  92. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    Ϛϧνϓϩηε
    SP
    PC hoge::i

    foo::tmp
    main()
    hoge()
    foo()
    globalHoges;
    ελοΫ
    ςΩετ
    σʔλ
    new bar[]; ώʔϓ
    SP
    PC hoge::i

    foo::tmp
    main()
    hoge()
    foo()
    globalHoges;
    new bar[];
    GPSL
    ϓϩηεͷίϐʔ
    Ծ૝ΞυϨεۭؒ Ծ૝ΞυϨεۭؒ
    Ϩδελ Ϩδελ
    1$ϓϩάϥϜΧ΢ϯλ
    41ελοΫϙΠϯλ

    View Slide

  93. ਌ϓϩηε
    ࢠϓϩηε
    ࢠϓϩηε
    ࢠϓϩηε
    ࢠϓϩηε
    ΫϥΠΞϯτ
    ΫϥΠΞϯτ
    ΫϥΠΞϯτ
    ΫϥΠΞϯτ
    ˛
    GPSLͯ͠
    ࢠϓϩηεΛ૿΍͢
    ͦΕͧΕ͕ɺ਌ͱ
    ಉ͡Α͏ʹड͚෇͚Δ
    Ϛϧνϓϩηεͷ࢓૊Έ

    View Slide

  94. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ϚϧνϓϩηεͷϝϦοτ
    ࢓૊Έ͕୯७
    ϓϩάϥϚ͕ҙࣝ͠ͳ͚Ε͹ͳΒͳ͍͜ͱ͕΄΅ͳ͍ɻ
    $P8ͷ࢓૊Έͷ͓͔͛ͰΞυϨεڞ༗Ͱ͖ΔͨΊɺ
    ίϐʔͷෛՙ͸ࢥͬͨΑΓ΋େ͖͘ͳ͍ɻ
    ॻ͖ࠐΈ࣌ʹ਌ͷϝϞϦۭؒΛࢠͷϝϞϦۭؒʹίϐʔ͢Δɻ

    ౎౓GPSL͢Δ͜ͱͳ͘ɺࣄલʹGPSLͯ͠ʢQSFGPSLʣ࢖͍ճ͢͜
    ͱ΋Ͱ͖Δɻ

    View Slide

  95. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ϚϧνϓϩηεͷσϝϦοτ
    ϝϞϦফඅྔ͕ଟ͍
    $P8Ͱڞ༗͸Ͱ͖Δ͕ɺॻ͖ࠐΈઌ͸ڞ༗Ͱ͖ͳ͍ͨΊɺ

    ঃʑʹϝϞϦΛফඅ͍ͯ͘͜͠ͱʹͳΔɻ
    ·ͨɺࢠϓϩηεҎ্ͷΫϥΠΞϯτ਺Λಉ࣌ʹ͞͹͚ͳ͍ɻ
    ݶք͕͘ΔͱXBZIBOETIBLFࡁΈͷ઀ଓ͸Ωϡʔʹͨ·Δɻ
    ͔͠͠ɺ୭΋BDDFQU͠ͳ͍ͨΊɺ٧·ͬͯ͠·͏ɻ

    View Slide

  96. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ϚϧνεϨου
    SP
    PC
    foo::i

    foo::j
    main()
    hoge()
    foo()
    globalHoges;
    ελοΫ
    ςΩετ
    σʔλ
    new bar[]; ώʔϓ
    hoge::x

    hoge::y
    εϨου̍
    SP
    PC
    ελοΫ
    εϨου̎
    Ϩδελ
    Ϩδελ
    1$ϓϩάϥϜΧ΢ϯλ
    41ελοΫϙΠϯλ
    Ծ૝ΞυϨεۭؒ

    View Slide

  97. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ϚϧνεϨουͷϝϦοτ
    ϝϞϦফඅ͕গͳ͍ʢϓϩηεΑΓʣ
    ϓϩηεͱಉ༷ʹ౎౓εϨουΛੜ੒͢Δํ๏ͱɺ

    ࣄલʹεϨουΛ͓͖ͭͬͯ͘࢖͍ճ͢ʢεϨουϓʔϧʣํ๏

    ͕͋Δɻ

    εϨου͸ϝϞϦΛ࠷ॳ͔Βڞ༗͢ΔͨΊɺ
    ϓϩηεΑΓϝϞϦফඅྔ͕গͳ͍ͱݴΘΕΔɻ

    View Slide

  98. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ϚϧνεϨουͷσϝϦοτ
    Ϧιʔεڝ߹͕ى͖΍͍͢
    ϚϧνεϨου͸ෳ਺ͷεϨου͕ϝϞϦۭؒΛڞ༗͢Δɻ
    ͦͷͨΊɺϦιʔε͕ڝ߹͠ͳ͍Α͏ʹؾΛ͚ͭͯ

    ϓϩάϥϜ͠ͳ͚Ε͹ͳΒͳ͍ɻ
    ͖ͪΜͱཧղ͍ͯ͠ͳ͚Ε͹ɺෆՄղͳόάΛੜΈग़͢ɻ

    View Slide

  99. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    Πϕϯτۦಈ
    ωοτϫʔΫ*0ΛଟॏԽͯ͠
    ϓϩηεεϨουͰ
    ෳ਺ͷωοτϫʔΫ઀ଓΛಉ࣌ʹࡹ͘
    ʢOPOCMPDLJOH*0Λ༻͍Δʣ
    Πϕϯτొ࿥
    Πϕϯτ଴ػ
    Πϕϯτॲཧ
    ޙॲཧ

    View Slide

  100. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ඇϒϩοΩϯά*0 OPOCMPDLJOH*0

    ιέοτ͸σϑΥϧτͰϒϩοΩϯάɻ

    ͜Ε͸ιέοτʹରͯ͠ଈ࠲ʹ׬ྃ͠ͳ͍γεςϜίʔϧΛ
    ݺͼग़ͨ࣌͠ɺݺͼग़ͨ͠ϓϩηε͸৚݅ͷ੒ཱΛ଴ͬͯ
    εϦʔϓ͢Δ͜ͱΛҙຯ͢Δɻ
    ඇϒϩοΩϯά*0Ͱ͸γεςϜίʔϧΛݺͼग़ͯ͠΋*0͕
    ४උͰ͖͍ͯͳ͚Ε͹ϒϩοΫͤͣଈ࠲ʹΤϥʔΛฦ͢ɻ
    ʢඇϒϩοΩϯά*0ͱඇಉظ*0͸ಉ͡Ͱͳ͍͜ͱʹ஫ҙʣ

    View Slide

  101. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ୅දతͳछྨͷ*0
    w ϒϩοΩϯά*0
    w ඇϒϩοΩϯά*0
    w *0ͷଟॏԽ
    w γάφϧۦಈ*0
    w ඇಉظ*0

    View Slide

  102. ϒϩοΩϯά*0
    ΞϓϦ Χʔωϧ
    γεςϜίʔϧΛݺͿͱ
    ΧʔωϧʹεΠον͢Δ JOJUJBUF
    SFBE*0
    SFBE
    SFTQPOTF
    σʔλΛ
    Χʔωϧۭ͔ؒΒ
    Ϣʔβʔۭؒ΁
    3FBE

    ϓϩηε͸γεςϜίʔϧͷ
    ฦ౴଴ͪʹͳΓுΓ෇͘ɻ
    ͦͷؒɺϓϩάϥϜͷॲཧ͕
    ਐΉ͜ͱ͸Ͱ͖ͳ͍ɻ
    CMPDLFE

    View Slide

  103. ඇϒϩοΩϯά*0
    ΞϓϦ Χʔωϧ
    γεςϜίʔϧΛݺͿͱ
    ΧʔωϧʹεΠον͢Δ
    JOJUJBUF
    SFBE*0
    SFBE
    SFTQPOTF
    3FBE

    ϑΝΠϧσΟεΫϦϓλͷ
    ४උ͕׬͍ྃͯ͠ͳ͚Ε͹
    ଈ࠲ʹΤϥʔΛฦ͢ɻ
    ϓϩηε͸ϒϩοΫ͞Εͣɺ
    ͦͷؒʹଞͷॲཧΛ͢Δ͜ͱ͕
    Ͱ͖Δɻ
    ଈ࠲ʹΤϥʔΛฦ͢
    ଈ࠲ʹΤϥʔΛฦ͢
    γεςϜίʔϧΛݺͿͱ
    ΧʔωϧʹεΠον͢Δ
    γεςϜίʔϧΛݺͿͱ
    ΧʔωϧʹεΠον͢Δ
    σʔλΛ
    Χʔωϧۭ͔ؒΒ
    Ϣʔβʔۭؒ΁

    View Slide

  104. *0ͷଟॏԽ
    QPMM
    ɺTFMFDU
    ɺFQPMM

    γεςϜίʔϧΛར༻͠ɺ
    ෳ਺ͷσΟεΫϦϓλΛ
    ̍ͭͷϓϩηεͰ؅ཧ͢Δ͜ͱɻ
    ೖग़ྗՄೳʹͳͬͨ৔߹ɺ
    Χʔωϧ͔Β௨஌͞ΕΔɻ
    ΞϓϦ Χʔωϧ
    γεςϜίʔϧΛݺͿͱ
    ΧʔωϧʹεΠον͢Δ
    JOJUJBUF
    SFBE*0
    SFBE
    SFTQPOTF
    4FMFDU

    ଈ࠲ʹΤϥʔΛฦ͢
    γεςϜίʔϧΛݺͿͱ
    ΧʔωϧʹεΠον͢Δ
    σʔλΛ
    Χʔωϧۭ͔ؒΒ
    Ϣʔβʔۭؒ΁
    SFBE

    4FMFDUͰ
    σʔλ͕ಡΊΔΑ͏ʹͳΔ
    SFBE

    CMPDLFE

    View Slide

  105. γάφϧۦಈ*0
    σΟεΫϦϓλͷ༻ҙ͕Ͱ͖ͨ࣌ʹɺ
    4*(*0γάφϧΛ༻͍ͯ௨஌͢Δɻ
    γάφϧۦಈ*0Ͱ͸ɺ
    *0ૢ࡞ͷىಈ͕Մೳʹͳͬͨ͜ͱΛ௨஌͢Δɻ
    ඇಉظ*0Ͱ͸ɺ
    *0ૢ࡞͕׬ྃͨ͜͠ͱΛ௨஌͢Δɻ
    ਅͷඇಉظ*0Ͱ͸ͳ͍ɻʢ*0ૢ࡞தʹଞͷ͜ͱ͕Ͱ͖ͳ͍ʣ

    View Slide

  106. ඇಉظ*0
    ΞϓϦ Χʔωϧ
    γεςϜίʔϧΛݺͿͱ
    ΧʔωϧʹεΠον͢Δ JOJUJBUF
    SFBE*0
    SFBE
    SFTQPOTF
    σʔλΛ
    Χʔωϧۭ͔ؒΒ
    Ϣʔβʔۭؒ΁

    ͷ


    ͕
    Մ

    *0ॲཧ͕׬ྃͨ͠λΠϛϯάͰ
    ௨஌Λߦ͏ɻ
    ௨஌͸γάφϧ͔ίʔϧόοΫʹ
    ΑͬͯߦΘΕɺ௨஌͕͘Δ·Ͱ͸
    ଞͷॲཧΛ͢Δ͜ͱ͕Ͱ͖Δɻ
    [email protected]

    *0
    QSPDFTTJOH

    View Slide

  107. ϝΠϯεϨου
    ΫϥΠΞϯτ
    ΫϥΠΞϯτ
    ΫϥΠΞϯτ
    ΫϥΠΞϯτ ετϨʔδ
    ඇϒϩοΩϯά*0
    *0ͷଟॏԽ
    Πϕϯτۦಈͷ࢓૊Έ

    View Slide

  108. εϨουϓϩηεͳͷʹ
    ͳͥฒߦॲཧͰ͖Δͷ͔ʁ
    *0ΛଟॏԽ͢Δ͜ͱͰɺ
    ෳ਺ͷσΟεΫϦϓλΛ؂ࢹ͠
    ඇϒϩοΩϯά*0ʹΑͬͯ
    ౎౓ͷ΍ΓͱΓ͕Ͱ͖ΔͨΊ

    View Slide

  109. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ΠϕϯτۦಈͷϝϦοτ
    ʮ$,໰୊ʯʹରԠ
    $,໰୊ʢΫϥΠΞϯτສ୆໰୊ʣͱ͸ϋʔυ΢ΣΞͷੑೳ
    ͕͕͋ͬͯ΋ɺΫϥΠΞϯτͷ਺͕ສ୆ۙ͘ʹͳΔͱɺ
    ϓϩηε΍εϨουͷ਺͕૿͑͗͢Δ͜ͱʹΑΓɺ
    ίϯςΩετεΠονͷΦʔόʔϔου͕େ͖͘ͳΓ͗ͯ͢
    ͞͹͚ͳ͘ͳΔ͜ͱɻΠϕϯτۦಈ͸͜ΕΛղܾ͢Δɻ

    View Slide

  110. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    ΠϕϯτۦಈͷσϝϦοτ
    ϚϧνίΞ͕׆͖ͳ͍
    Πϕϯτۦಈ͸جຊ̍ϓϩηε̍εϨουͷͨΊ
    ϚϧνίΞͷ$16Λ׆͔͢͜ͱ͕Ͱ͖ͳ͍ɻ
    ·ͨɺ̍ϓϩηε̍εϨουͳͷͰɺ

    ϓϩηε͕ࢮ͵ͱ͖͸͢΂ͯר͖ࠐΜͰࢮ͵ɻ

    View Slide

  111. Α͠ϋΠϒϦουʹ͠Α͏

    View Slide

  112. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE
    w "QBDIF.1.QSFGPSLʢϚϧνϓϩηεʣ
    w "QBDIF.1.XPSLFSʢϚϧνϓϩηεʴϚϧνεϨουʣ
    w "QBDIF.1.FWFOUʢϚϧνϓϩηεʴΠϕϯτۦಈʣ
    w **4ʢϚϧνϓϩηεʴϚϧνεϨουʣ
    w OHJOYʢϚϧνϓϩηεʴΠϕϯτۦಈʣ
    ࣮ࡍͷ)551αʔόͰ͸ɺεέʔϧ͢ΔͨΊʹ
    ඇৗʹߴ౓ͳ͜ͱ͕ߦΘΕ͍ͯ·͢ɻ
    ૊Έ߹ΘͤʹΑΔ࢓૊Έ
    NQNNVMUJQSPDFTTJOHNPEVMF

    View Slide


  113. બ୒
    ͷ
    Λ
    ୈ࿡
    ɹ࿩

    View Slide

  114. ݸʑͷḉੑೳ͸
    ঢ়گͱઃఆʹґΔ

    ͷͰ߇͑·͢

    View Slide

  115. ·ͱΊ

    View Slide

  116. )551ͱ͸Կ͔Λ஌Δ
    ωοτϫʔΫͷίετ͸

    ඇৗʹߴ͍͜ͱʹؾΛ͚ͭΔ
    8FCαʔόʹ͓͚Δ

    ฒߦԽͷ୅දతͳख๏ͱɺ

    *0ʹର͢ΔରࡦΛ஌Δ

    View Slide

  117. ͍Ζ͍Ζ΍͖ͬͯͨ݁࿦ɿ

    ো֐ൃੜ࣌͸ɺ
    Ͳ͜ͰϘτϧωοΫ͕ൃੜ͍ͯ͠Δ͔
    ໰୊ͷ੾Γ෼͚Λ·ͣߟ͑Δ͜ͱ

    View Slide

  118. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide