Slide 1

Slide 1 text

εςʔτϨε VS εςʔτϑϧ ঢ়ଶ؅ཧͱฒߦੑ TechTrain ͭΑφϨ #1 PHPʹ·ͭΘΔ࿩ ytake

Slide 2

Slide 2 text

Pro fi le • ஛ᖒ ༗و a.k.a ytake • ઍגࣜձࣾ CTO / ΄͔ٕज़ސ໰ • Go / Scala / Kotlin • ΞΫλʔϞσϧɺσʔλج൫ɺDDD·ΘΓɺ෼ࢄॲཧͳͲ

Slide 3

Slide 3 text

ঢ়ଶͱϥϯλΠϜ • ϥϯλΠϜͷҧ͍Λཧղ͓͖ͯ͠·͠ΐ͏ • εςʔτϨε͔εςʔτϑϧ ͲͪΒ͔Ͱ͸ͳ྆͘ํ͏·͘ѻ͏ • PHPͰฒߦॲཧΛ͏·͘΍Δʹ͸ঢ়ଶ؅ཧ͕ඞཁʂ

Slide 4

Slide 4 text

PHP • WebΞϓϦέʔγϣϯͱͯ͠ੈքͰ΋ͨ͘͞Μ࢖ΘΕ͍ͯΔݴޠ • Facebook΋ݩʑ͸PHP / PHPͷݱࡏͷਐԽʹ΋େ͖͘ߩݙ • ͳΜ͔ͩΜͩWordpress͸Ғେ • WebαʔόͷϞδϡʔϧɺ΋͘͠͸࿈ܞͯ͠ಈ͘ࣄ͕ଟ͍

Slide 5

Slide 5 text

Go • goroutineͱ͍͏࢓૊ΈΛ࢖ͬͯฒߦॲཧΛಘҙͱ͢Δݴޠ • γϯάϧόΠφϦͰϓϩηεͱͯ͠ಈ࡞ • ίϯςφͱͷ૬ੑ΋ྑ͍ • ΞϓϦέʔγϣϯαʔόͱͯ͠ػೳʢWebαʔόෆཁʣ

Slide 6

Slide 6 text

Scala • Scala͸ؔ਺ܕϓϩάϥϛϯάͱΦϒδΣΫτࢦ޲ • ޮ཰తͳฒߦॲཧΛαϙʔτ͢ΔFutureͳͲ • σʔλॲཧܥ΍େن໛ͳ࢓૊ΈΛࢧ͑Δ͜ͱ͕ଟ͍ • ΞϓϦέʔγϣϯαʔόͱͯ͠ػೳʢWebαʔόෆཁʣ

Slide 7

Slide 7 text

ͦ΋ͦ΋ฒߦͬͯʁ • ฒྻ͸"׬શʹಠཱ"ͯ͠ϦιʔεΛফඅ͢Δ΋ͷ • ฒߦ͸ϦιʔεΛڞ༗͠ͳ͕Βަޓʹফඅ ॲཧத͸"ฒྻʹݟ͑Δࣄ͕͋Δ" • PHPͰ؆୯ʹѻ͑Δ΋ͷ͸ͦΜͳʹଟ͘ͳ͍

Slide 8

Slide 8 text

ͦ΋ͦ΋ฒߦͬͯʁ • खΛୟ͘ͷ͕ऴΘ͔ͬͯΒ଍Λୟ͘ͷ͕ஞ࣍ • खΛୟ͍͍͚ͯͨͲ్தͰ΍Ίͯ଍Λୟ͍ͯ ·ͨखΛୟ͘Έ͍ͨͳͷ͕ฒߦ • खͱ଍Λಉ࣌ୟ͘ͷ͕ฒྻ • खΛୟ͖͍ͨͳ͊ͱࢥ͍͔ͬͯͭୟ͘ͷ͕ඇಉظ • खΛୟͧ͘ʂͰୟ͘ͷ͕ಉظ

Slide 9

Slide 9 text

େ͖ͳҧ͍ͬͯʁ • PHP͸ HTTPϦΫΤετ͕དྷͨΒͦͷ౎౓ϓϩηεΛ্ཱͪ͛ͯऴྃ • جຊతʹঢ়ଶΛ࣋ͨͣʢ࣋ͯͳ͍ʣɺ ঢ়ଶอ࣋͸֎෦ʹ͓ئ͍͢Δ࢓૊Έ • ނʹඇৗʹγϯϓϧ

Slide 10

Slide 10 text

େ͖ͳҧ͍ͬͯʁ • Go΍Scala͸ϓϩηεͱͯ͠ಈ࡞͢ΔͨΊɺ ঢ়ଶΛ؅ཧ͠ͳ͕Βޮ཰తʹॲཧΛߦ͏ • ࣗ਎͕σʔλετϨʔδʹͳΔ͜ͱ΋΋ͪΖΜOK • ϓϩηεͱͯ͠ঢ়ଶΛࣗ෼Ͱ࣋ͭͨΊɺ ฒߦॲཧͳͲ΋༰қ

Slide 11

Slide 11 text

PHPͰฒߦॲཧ͍ͨ͠ɾɾʁ • ผϓϩηεͰىಈͨ͠PHPϓϩηεಉ࢜ͷ ίϛϡχέʔγϣϯ͕೉͍͠ɾɾ • εϨουతͳ΋ͷ͸ͳ͍ʢextention͸আ͘ʣ • ॏ͍ͨॲཧ͸ඇಉظʹ͢Δ͔͠ͳ͍ɾɾ

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

PHPͰඇಉظॲཧ͍ͨ͠ɾɾʁ • QueueͳͲͷϛυϧ΢ΣΞΛ࢖ͬͯ ผϓϩηεɾΞϓϦέʔγϣϯͱͯ͠औΓʹߦͬͯॲཧ • Swoole΍ReactPHPͳͲΛซ༻ͯ͠ؤுΔ • ϓϩηεͱͯ͠ಈ࡞ͤ͞ΔͨΊʹsupervisorͳͲͰ؅ཧ͠ͳ͚Ε͹ɾ

Slide 14

Slide 14 text

ॱ൪ • Ͳ͕ͬͪૣ͘ऴΘΔ͔ • ෼ࢄͨ͠ͱ͖͸ૢ࡞ෆՄ

Slide 15

Slide 15 text

PHPͰৗ࣌ϓϩηεʹ͢ΔͱϋϚΔ΋ͷ • εςʔτϨεલఏͷίʔυΛॻ͘ͱϝϞϦϦʔΫʹɾɾ • ඞཁ͕ͳ͘ͳͬͨม਺͸ͱʹ͔͘ϝϞϦ͔Βଈղ์͢Δʂ • σʔλϕʔε͸connectͱdisconnectΛ͖ͪΜͱ؅ཧ͢Δ • ࣋ଓ઀ଓ͕ۤखͳͷͰɺphp.ini΍WebαʔόͷઃఆΛ

Slide 16

Slide 16 text

Go΍ScalaͰ͸ɾɾʁ • ͦ΋ͦ΋ϙΠϯλ΍εϨουͳͲͰޮ཰తʹॲཧ͢Δ࢓૊Έ • ΞυϨεʹ઀ଓͳͲΛ֬อͯ͠࢖͍ճͨ͠Γ͢Δ • ScalaͰ͸ΞΫλʔΛར༻ͯ͠ҙਤతʹϦιʔεؔ࿈΋ૢ࡞Ͱ͖Δ

Slide 17

Slide 17 text

on("request", function ($request, $response) use (&$leakyArray) { $leakyArray[] = str_repeat("leak", 1000); $tempFile = fopen("/tmp/tempfile", "w"); fwrite($tempFile, "temporary data"); $response->end("Hello World\n"); }); $server->start();

Slide 18

Slide 18 text

on("request", function ($request, $response) use (&$leakyArray) { $leakyArray[] = str_repeat("leak", 1000); $tempFile = fopen("/tmp/tempfile", "w"); fwrite($tempFile, "temporary data"); $response->end("Hello World\n"); }); $server->start(); ϦΫΤετͷͨͼʹ௥Ճ

Slide 19

Slide 19 text

on("request", function ($request, $response) use (&$leakyArray) { $leakyArray[] = str_repeat("leak", 1000); $tempFile = fopen("/tmp/tempfile", "w"); fwrite($tempFile, "temporary data"); $response->end("Hello World\n"); }); $server->start(); Ϧιʔε։์๨Ε '%͕Ұഋʹɾɾ

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

PHPͰΞΫλʔϞσϧΛཧղɾମݧ͠Α͏ Understand and experience the actor model in PHP phpcon okinawa 2024 yuuki takezawa a.k.a ytake

Slide 22

Slide 22 text

γϯάϧτϯ • PHPͷγϯάϧτϯ͸HTTPͷϥΠϑαΠΫϧͷΈͷ΋ͷ • PHPͰৗ࣌ϓϩηεͰγϯάϧτϯʹ͢Δͱ ଞͷ৔ॴͰॻ͖ࠐ·ΕΔ͜ͱ΋͋Γɺঢ়ଶ΋มΘΔ • mutexͳͲ΋ซ༻͠Α͏ʂ • DIίϯςφ͕ରԠ͍ͯ͠ͳ͍৔߹΋ଟ਺͋Γ

Slide 23

Slide 23 text

͓·͚ PHP͋Δ͋Δ1 • ޮՌతʹΩϟογϡ͢ΔͨΊʹphpserialize͠Α͏ʂ • ଞݴޠ͔Βར༻Ͱ͖ͳ͍ɾɾ ͔ͭ෮ݩ͠Α͏ͱ͢ΔPHPΞϓϦέʔγϣϯ͸ ಉ͡ΫϥεͳͲΛߏ଄ͱ͍ͯ࣋ͬͯ͠ͳ͚Ε͹ͳΒͳ͍ • ଞݴޠͱ΍ΓऔΓΛߦ͏৔߹΍ϚΠΫϩαʔϏεͰ͸ආ͚Α͏ʂ

Slide 24

Slide 24 text

·ͱΊ • ϥΠϑαΠΫϧ΍ϥϯλΠϜͷҧ͍Λཧղ͠·͠ΐ͏ʂ • ݴޠ͕ѱ͍ͷͰ͸ͳͯ͘େମ͸࡞Γํͷ໰୊ • ͍ΖΜͳݴޠΛ৮ͬͯ஌ࣝΛ͚ͭΑ͏ʂ