Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP ステートレス VS ステートフル 状態管理と並行性 / php-stateless-s...
Search
yuuki takezawa
February 05, 2025
Programming
0
260
PHP ステートレス VS ステートフル 状態管理と並行性 / php-stateless-stateful
つよナレ #1 PHPにまつわる話
https://techtrain.connpass.com/event/330882/
でのお話です
yuuki takezawa
February 05, 2025
Tweet
Share
More Decks by yuuki takezawa
See All by yuuki takezawa
なぜAI時代に 「イベント」を中心に考えるのか? / Why focus on "events" in the age of AI?
ytake
4
1.7k
PHPでアクターモデルを活用したSagaパターンの実践法 / php-saga-pattern-with-actor-model
ytake
0
2.1k
PHPでアクターモデルを理解・体験しよう / Understand and experience the actor model in PHP
ytake
2
750
再考 アクターモデル/ reconsider actor model
ytake
0
1.4k
GoとアクターモデルでES+CQRSを実践! / proto_actor_es_cqrs
ytake
1
590
Phluxorでアクターモデルを 理解・体験しよう / toolkit-for-flexible-actor-models-in-php-phluxor
ytake
1
340
オブジェクトのおしゃべり大失敗 メッセージングアンチパターン集 / messaging anti-pattern collection
ytake
2
1.2k
DRE/SREのプラクティス融合によるクラウドネイティブなデータ基盤作り / dre_sre
ytake
0
930
技術的負債と向き合う取り組みでよかったもの / positive_efforts_to_tackle_technical_debt
ytake
10
3.9k
Other Decks in Programming
See All in Programming
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
Integrating WordPress and Symfony
alexandresalome
0
150
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
150
認証・認可の基本を学ぼう前編
kouyuume
0
200
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.5k
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
7.1k
JETLS.jl ─ A New Language Server for Julia
abap34
1
390
AWS CDKの推しポイントN選
akihisaikeda
1
240
connect-python: convenient protobuf RPC for Python
anuraaga
0
400
認証・認可の基本を学ぼう後編
kouyuume
0
190
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
350
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.3k
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.9k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Docker and Python
trallard
47
3.7k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Optimizing for Happiness
mojombo
379
70k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
710
How GitHub (no longer) Works
holman
316
140k
[SF Ruby Conf 2025] Rails X
palkan
0
510
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Transcript
εςʔτϨε VS εςʔτϑϧ ঢ়ଶཧͱฒߦੑ TechTrain ͭΑφϨ #1 PHPʹ·ͭΘΔ ytake
Pro fi le • ᖒ ༗و a.k.a ytake • ઍגࣜձࣾ
CTO / ΄͔ٕज़ސ • Go / Scala / Kotlin • ΞΫλʔϞσϧɺσʔλج൫ɺDDD·ΘΓɺࢄॲཧͳͲ
ঢ়ଶͱϥϯλΠϜ • ϥϯλΠϜͷҧ͍Λཧղ͓͖ͯ͠·͠ΐ͏ • εςʔτϨε͔εςʔτϑϧ ͲͪΒ͔Ͱͳ྆͘ํ͏·͘ѻ͏ • PHPͰฒߦॲཧΛ͏·͘Δʹঢ়ଶཧ͕ඞཁʂ
PHP • WebΞϓϦέʔγϣϯͱͯ͠ੈքͰͨ͘͞ΜΘΕ͍ͯΔݴޠ • FacebookݩʑPHP / PHPͷݱࡏͷਐԽʹେ͖͘ߩݙ • ͳΜ͔ͩΜͩWordpressҒେ •
WebαʔόͷϞδϡʔϧɺ͘͠࿈ܞͯ͠ಈ͘ࣄ͕ଟ͍
Go • goroutineͱ͍͏ΈΛͬͯฒߦॲཧΛಘҙͱ͢Δݴޠ • γϯάϧόΠφϦͰϓϩηεͱͯ͠ಈ࡞ • ίϯςφͱͷ૬ੑྑ͍ • ΞϓϦέʔγϣϯαʔόͱͯ͠ػೳʢWebαʔόෆཁʣ
Scala • ScalaؔܕϓϩάϥϛϯάͱΦϒδΣΫτࢦ • ޮతͳฒߦॲཧΛαϙʔτ͢ΔFutureͳͲ • σʔλॲཧܥେنͳΈΛࢧ͑Δ͜ͱ͕ଟ͍ • ΞϓϦέʔγϣϯαʔόͱͯ͠ػೳʢWebαʔόෆཁʣ
ͦͦฒߦͬͯʁ • ฒྻ"શʹಠཱ"ͯ͠ϦιʔεΛফඅ͢Δͷ • ฒߦϦιʔεΛڞ༗͠ͳ͕Βަޓʹফඅ ॲཧத"ฒྻʹݟ͑Δࣄ͕͋Δ" • PHPͰ؆୯ʹѻ͑ΔͷͦΜͳʹଟ͘ͳ͍
ͦͦฒߦͬͯʁ • खΛୟ͘ͷ͕ऴΘ͔ͬͯΒΛୟ͘ͷ͕ஞ࣍ • खΛୟ͍͍͚ͯͨͲ్தͰΊͯΛୟ͍ͯ ·ͨखΛୟ͘Έ͍ͨͳͷ͕ฒߦ • खͱΛಉ࣌ୟ͘ͷ͕ฒྻ • खΛୟ͖͍ͨͳ͊ͱࢥ͍͔ͬͯͭୟ͘ͷ͕ඇಉظ
• खΛୟͧ͘ʂͰୟ͘ͷ͕ಉظ
େ͖ͳҧ͍ͬͯʁ • PHP HTTPϦΫΤετ͕དྷͨΒͦͷϓϩηεΛ্ཱͪ͛ͯऴྃ • جຊతʹঢ়ଶΛ࣋ͨͣʢ࣋ͯͳ͍ʣɺ ঢ়ଶอ࣋֎෦ʹ͓ئ͍͢ΔΈ • ނʹඇৗʹγϯϓϧ
େ͖ͳҧ͍ͬͯʁ • GoScalaϓϩηεͱͯ͠ಈ࡞͢ΔͨΊɺ ঢ়ଶΛཧ͠ͳ͕ΒޮతʹॲཧΛߦ͏ • ͕ࣗσʔλετϨʔδʹͳΔ͜ͱͪΖΜOK • ϓϩηεͱͯ͠ঢ়ଶΛࣗͰ࣋ͭͨΊɺ ฒߦॲཧͳͲ༰қ
PHPͰฒߦॲཧ͍ͨ͠ɾɾʁ • ผϓϩηεͰىಈͨ͠PHPϓϩηεಉ࢜ͷ ίϛϡχέʔγϣϯ͕͍͠ɾɾ • εϨουతͳͷͳ͍ʢextentionআ͘ʣ • ॏ͍ͨॲཧඇಉظʹ͢Δ͔͠ͳ͍ɾɾ
None
PHPͰඇಉظॲཧ͍ͨ͠ɾɾʁ • QueueͳͲͷϛυϧΣΞΛͬͯ ผϓϩηεɾΞϓϦέʔγϣϯͱͯ͠औΓʹߦͬͯॲཧ • SwooleReactPHPͳͲΛซ༻ͯ͠ؤுΔ • ϓϩηεͱͯ͠ಈ࡞ͤ͞ΔͨΊʹsupervisorͳͲͰཧ͠ͳ͚Εɾ
ॱ൪ • Ͳ͕ͬͪૣ͘ऴΘΔ͔ • ࢄͨ͠ͱ͖ૢ࡞ෆՄ
PHPͰৗ࣌ϓϩηεʹ͢ΔͱϋϚΔͷ • εςʔτϨεલఏͷίʔυΛॻ͘ͱϝϞϦϦʔΫʹɾɾ • ඞཁ͕ͳ͘ͳͬͨมͱʹ͔͘ϝϞϦ͔Βଈղ์͢Δʂ • σʔλϕʔεconnectͱdisconnectΛ͖ͪΜͱཧ͢Δ • ࣋ଓଓ͕ۤखͳͷͰɺphp.iniWebαʔόͷઃఆΛ
GoScalaͰɾɾʁ • ͦͦϙΠϯλεϨουͳͲͰޮతʹॲཧ͢ΔΈ • ΞυϨεʹଓͳͲΛ֬อ͍ͯ͠ճͨ͠Γ͢Δ • ScalaͰΞΫλʔΛར༻ͯ͠ҙਤతʹϦιʔεؔ࿈ૢ࡞Ͱ͖Δ
<?php use Swoole\Http\Server; $server = new Server("127.0.0.1", 9501); $leakyArray =
[]; $server->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();
<?php use Swoole\Http\Server; $server = new Server("127.0.0.1", 9501); $leakyArray =
[]; $server->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(); ϦΫΤετͷͨͼʹ Ճ
<?php use Swoole\Http\Server; $server = new Server("127.0.0.1", 9501); $leakyArray =
[]; $server->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(); Ϧιʔε։์Ε '%͕Ұഋʹɾɾ
None
PHPͰΞΫλʔϞσϧΛཧղɾମݧ͠Α͏ Understand and experience the actor model in PHP phpcon
okinawa 2024 yuuki takezawa a.k.a ytake
γϯάϧτϯ • PHPͷγϯάϧτϯHTTPͷϥΠϑαΠΫϧͷΈͷͷ • PHPͰৗ࣌ϓϩηεͰγϯάϧτϯʹ͢Δͱ ଞͷॴͰॻ͖ࠐ·ΕΔ͜ͱ͋Γɺঢ়ଶมΘΔ • mutexͳͲซ༻͠Α͏ʂ • DIίϯςφ͕ରԠ͍ͯ͠ͳ͍߹ଟ͋Γ
͓·͚ PHP͋Δ͋Δ1 • ޮՌతʹΩϟογϡ͢ΔͨΊʹphpserialize͠Α͏ʂ • ଞݴޠ͔Βར༻Ͱ͖ͳ͍ɾɾ ͔ͭ෮ݩ͠Α͏ͱ͢ΔPHPΞϓϦέʔγϣϯ ಉ͡ΫϥεͳͲΛߏͱ͍ͯ࣋ͬͯ͠ͳ͚ΕͳΒͳ͍ • ଞݴޠͱΓऔΓΛߦ͏߹ϚΠΫϩαʔϏεͰආ͚Α͏ʂ
·ͱΊ • ϥΠϑαΠΫϧϥϯλΠϜͷҧ͍Λཧղ͠·͠ΐ͏ʂ • ݴޠ͕ѱ͍ͷͰͳͯ͘େମ࡞Γํͷ • ͍ΖΜͳݴޠΛ৮ͬͯࣝΛ͚ͭΑ͏ʂ