Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Fiberとは何か?PHPが“非同期言語”になった瞬間
Search
kouki.miura
April 16, 2026
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Fiberとは何か?PHPが“非同期言語”になった瞬間
PHP8.1で追加されたFiberの説明です。
kouki.miura
April 16, 2026
More Decks by kouki.miura
See All by kouki.miura
診療情報提供書 × HL7 FHIR ~医療情報の標準化を実際に実装してみる~
koukimiura
0
62
VueプロジェクトをTypeScript7に対応させる- Side-by-Side戦略による一部高速化 -
koukimiura
0
160
VueSapporo#4
koukimiura
0
40
Vue3_Capacitorでモバイルアプリ開発
koukimiura
0
43
Vueが軽く&速くなる!Vapor Modeを試してみた
koukimiura
0
61
Vue3.6.0-rc_CHANGELOG読み合わせ
koukimiura
0
53
医療DXって何?~電子カルテ標準仕様まで10分で理解する~
koukimiura
1
110
アプリ開発者が知っておくべき『トランザクション分離レベル』とRead Committed の罠
koukimiura
0
120
フルスタックTypeScript入門 ~Hono RPCとZodで実現する型共有~
koukimiura
0
82
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
370
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.2k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
460
iOSDCのペンライトを自動制御したい!
akkeylab
0
280
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
260
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
iOSDC2026登壇資料.pdf
riofujimon
0
200
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
150
Webの地図
yosuke_furukawa
PRO
6
5k
FreeBSDでZabbixを動かす
kenkino
0
340
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
600
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
The untapped power of vector embeddings
frankvandijk
2
1.9k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
480
Making Projects Easy
brettharned
120
6.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Amusing Abliteration
ianozsvald
1
320
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Become a Pro
speakerdeck
PRO
31
6.3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
430
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Transcript
Fiberとは何か?PHPが“非同期言語”になった瞬間 2026.04.16 札幌PHP勉強会 ナイトセッション #1 三浦 恒樹 (MIURA KOUKI) 診療情報管理士
上級医療情報技師 医用画像情報専門技師 ドゥウェル株式会社
長男が飼っている ハリネズミがアイコン INTRODUCE ・ドゥウェル株式会社 (医療系IT開発・導入会社)に所属 ・マネージャー(プレイング・マネージャー) ・TypeScript, Vue.js, Node.js, Java,C#,
PHP ・3児の父 ・休日は子どものサッカー観戦 ・参加している勉強会 札幌PHP勉強会、JBUG札幌、JavaDO、ゆるWeb勉強会、えびてく、 クラメソ札幌IT勉強会(仮)、AWS初心者LT会in札幌、札幌すごいAI会、 札幌IT石狩鍋、函館本線沿線勉強会、VueSapporo、さっぽろ医療IT勉強会 等 is the NIHON KOHDEN Group
・#1 なぜ非同期が必要か ・#2 Node.jsとの違い ・#3 Fiberとは何か ・#4 Fiberの基本動作 ・#5 何がすごいのか
・#6 何ができるのか ・#7 まとめ INDEX
#1 なぜ非同期が必要か foreach ($urls as $url) { // 開始ログ $start
= (new DateTime())->format('H:i:s.v'); echo "[$start] START: $url\n"; // 取得実行 $data = @file_get_contents($url); // 完了ログ $end = (new DateTime())->format('H:i:s.v'); $status = $http_response_header[0] ?? 'Connection Failed'; echo "[$end] END : $status\n"; echo "-------------------------------------------\n"; } [22:30:51.899] START: URL1 [22:30:52.818] END : HTTP/1.1 200 OK ------------------------------------------- [22:30:52.820] START: URL2 [22:30:53.362] END : HTTP/1.1 200 OK ------------------------------------------- 1つずつ処理される ・同期・ブロッキング ・I/O待ちで止まる
#2 Node.js との違い async function fetchLog(url) { const time =
() => new Date().toISOString().slice(11, 23); console.log(`[${time()}] START: ${url}`); const res = await fetch(url).catch(e => ({ status: 'Error' })); console.log(`[${time()}] END : ${res.status} | ${url}`); } [22:45:07.717] START: URL1 [22:45:07.886] START: URL2 [22:45:08.479] END : 200 | URL1 [22:45:08.482] END : 200 | URL2 Node.jsは非同期が前提 ・async/await →PHPは「遅い」と言われがち
#3 Fiber とは何か ・PHP 8.1 で追加された (2021.11) ・軽量コルーチン ・処理を止めて戻せる → 処理を一時停止・再開できる仕組み
#4 Fiber の基本動作 <?php $fiber = new Fiber(function (): void
{ // この行で 'suspending...' を返して停止する $value = Fiber::suspend('suspending...'); echo 'Value used to resume fiber: ', $value, PHP_EOL; }); // Fiberを開始したが、suspendで 'suspending...' が返却されて止まっている $value = $fiber->start(); echo 'Value from fiber suspending: ', $value, PHP_EOL; $fiber->resume('do resume!'); // 'do resume!' を渡してFiberを再開する Value from fiber suspending: suspending... Value used to resume fiber: do resume! start()するとsuspend まで実行して止まる resume()すると止まってい たところから再開する
#5 何がすごいのか ・処理を止めて戻せる (再掲) ・実行制御を自分でコントロールできる → 非同期処理も”同期っぽく書ける” ! 並列処理(マルチスレッド)ではなく、並行処理を記述できる制御API
#6 何ができるのか ・非同期ライブラリの基盤 ・Amp ・Swoole → アプリ開発者は直接使わない https://github.com/amphp/amp
#6 何ができるのか $task = new Fiber(function (): mixed { echo
" [Fiber] 処理開始。2秒待ちます...\n"; // 現在時刻に2秒足したものを「目標時刻」とする $targetTime = microtime(true) + 2.0; // 目標時刻になるまで、何度も「中断(suspend)」してメインに戻る while (microtime(true) < $targetTime) { Fiber::suspend(); } echo " [Fiber] 2秒経ったので終了します。\n"; return "完了データ"; }); // --- 外部(メインループ / スケジューラ) --- echo "メイン: 監視を開始します。\n"; $task->start(); $count = 0; while (true) { $count++; // 終了しているかチェックしてからresume if ($task->isTerminated()) { break; } $result = $task->resume(); // returnされた値は、最後のresumeの後に getReturn() で取得するのが一般的 if ($task->isTerminated()) { echo "メイン: Fiberから届きました -> " . $task->getReturn() . "\n"; break; // 届いたら即座にループを抜ける } else { echo "メイン: まだかな? (ループ回数: $count)\n"; } usleep(500000); } echo "メイン: 終了しました。\n"; メイン: 監視を開始します。 [Fiber] 処理開始。2秒待ちます... メイン: まだかな? (ループ回数: 1) メイン: まだかな? (ループ回数: 2) メイン: まだかな? (ループ回数: 3) メイン: まだかな? (ループ回数: 4) [Fiber] 2秒経ったので終了します。 メイン: Fiberから届きました -> 完了データ メイン: 終了しました。 結果 ループで0.5秒ごとにタ スク状況を確認する 2秒経過したらタ スク終了する
ご清聴ありがとうございました。 #7 まとめ ・PHP 8.1 で追加された (2021.11) ・軽量コルーチン ・処理を止めて戻せる → 実行制御を自分でコントロールできる
お知らせ 4/27(月) 19:00~ 5/23(土) 17:30~
おまけ pthreadsは? parallelは? https://www.php.net/manual/en/book.pthreads.php https://www.php.net/manual/en/book.parallel.php