8
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで非同期+プロセス管理? PHP-FPMより15倍速いというPHP-PMというモノを知った(PHP-fpmじゃないよ!)

Posted at

An example of how PHP Process Manager helps handling requests
ref: https://tsh.io/blog/php-pm-guide-getting-started-with-the-process-manager/

先日、色々調べ物をしていたら、ReactPHPという変なのを見つけました。
https://reactphp.org/

ここで言うReactはJavascriptのReact.jsじゃないです。Reactパターン?スタイル?のReactです。(ReactJSも元はPHPのHTMLコンポーネントライブラリのXHPがベースらしいんですが https://qiita.com/ytake/items/2ee2c0e10c6ef6f040fa
PHPで非同期でマルチプロセスでってやつです。驚いたことにPHPで書かれています。
正直、「コレPHPで書くか?」って思ったんですが、面白そうだったので色々調べたらPHP-PMというものを見つけました。

PPM - PHP Process Manager

https://github.com/php-pm/php-pm
PPMと略すみたいです。
ReactPHPを使って、SymfonyやLaravelが動くPHPのmiddleware(PSR-15)として実装されている感じです。SymfonyのHttpKernelのAdapterとして動作するとのことです。なので、nginxはPPMのプロキシとして動作します。
PPMは実行されると8080番ポートとかでずっとListenし続け、PPMがPHPを子プロセスとしてcliで動かしてプロセス管理をするとの事で、利用するphp.iniはcli用の設定になります。

なので、利用するためにはPCNTLが必要であり、configureオプション--enable-pcntlが必要になります。
https://www.php.net/manual/ja/book.pcntl.php

Nginx + PHP-fpmの15倍速いらしい

PHP Process Manager in faster than Apache and FMP

メモリリークは健在

公式ページでは、主な課題に「メモリリーク!メモリリーク!メモリリーク! まあ、プロセス再起動されるからきっと大丈夫だよ」的な事が書いてあり、引用元の記事でも

PHP-PM could cause big memory leaks (there’s probably some issue with restarting workers); it consumed all of my memory and crashed my PC; it happened twice,

と「メモリリーク凄くてPCクラッシュしたわ」的な事が書いてあるので、ここは注意が必要そうです。

まとめ

正直、「えー!?本当に速くなんの?」という疑念が振り払えないし、PHPでプロセス制御するってのに感覚的な恐怖を覚えます。
メモリリークもPCクラッシュするほどって話だし、まだまだ発展途上なのかなぁという感じです。

が、きちんと検証せずに感情だけで判断してはダメなので、近いうちに色々試してみようと思います。

ちなみに、PHPで非同期処理ってのだとSwooleってのがあり、こっちはC++で書かれていてPECLモジュールにもなっているので、感覚的にはこっちの方が安心できる。
https://qiita.com/gorogoroyasu/items/44119f8b2ba725859018

8
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?