PHP と SAPI と ZendEngine3 と

Mar. 9, 2018
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
1 of 95

More Related Content

What's hot

JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るYoshio Hanawa
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソYoshitaka Kawashima

Similar to PHP と SAPI と ZendEngine3 と

php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...do_aki
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020Rui Hirokawa
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarSotaro Karasawa
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法Rui Hirokawa
Php in rubyPhp in ruby
Php in rubydo_aki

More from do_aki

Tritonn から Elasticsearch への移行話Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話do_aki
再考:列挙型再考:列挙型
再考:列挙型do_aki
signal の話 或いは Zend Signals とは何かsignal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かdo_aki
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)do_aki
Writing php extensions in golangWriting php extensions in golang
Writing php extensions in golangdo_aki
php7's astphp7's ast
php7's astdo_aki

Recently uploaded

ReonHata_JSAI2023ReonHata_JSAI2023
ReonHata_JSAI2023Matsushita Laboratory
gtk4_gem_usage.pdfgtk4_gem_usage.pdf
gtk4_gem_usage.pdfssuser0ef4681
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdfIGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdfIGDA Japan SIG-Audio
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)NTT DATA Technology & Innovation
HarukiShinkawa_FIT2023HarukiShinkawa_FIT2023
HarukiShinkawa_FIT2023Matsushita Laboratory
松下研究室紹介_関西大学高槻キャンパスオープンキャンパス松下研究室紹介_関西大学高槻キャンパスオープンキャンパス
松下研究室紹介_関西大学高槻キャンパスオープンキャンパスMatsushita Laboratory

PHP と SAPI と ZendEngine3 と

Editor's Notes

  1. mod_php も embeded も 非Winだと libphp7.so という名前であることが多いのが紛らわしい。 どちらも共有ライブラリで、前者は apache httpd 専用、後者は目的を限定しない
  2. PHP7で一貫した 64bit サポートを実現するにあたって、SAPI module の改修は必須だった。 しかし、SAPI だけでなく、サーバすらまともにメンテされていないものも多く、利用もされてないので労力を減らすために不要なSAPI の移植は断念したと ほとんどのサーバは FastCGI 話せるから、PHP-FPM (や cgi-fcgi)使えばWebサーバに依存せずに使えるよね ということらしい 8+15=23種
  3. * https://ci.apache.org/projects/httpd/trunk/doxygen/group__APACHE__CORE__PROTO.html * https://fastcgi-archives.github.io/FastCGI_Specification.html
  4. 単一バイナリで複数の SAPI module php コマンドは通常 cli, -S オプション付きで起動すると cli-server 他の SAPI module を利用 nginx unit (nginx アプリケーションサーバ) は libphp (embed) を利用して、 独自の SAPI module (unit) を実装している
  5. php-cgi は、 CGIとしてもFCGI としても動作可能だけど、どちらも cgi-fcgi SAPI lsphp も似た感じ
  6. 一つの リクエストを処理している間、ほかのリクエストを処理することはできない リクエストをまたいでリソースが共有されない
  7. 起動後にプロセスを立ち上げておいて、リクエストが来たら空いているプロセスが順次処理する 一般的な PHP の実行モデル。 PHP がこうするのではなく、 Webサーバにこう動いてもらう という想定。 ただし、 fastcgi の場合は PHP 自身 (cgi-fcgi/fpm-fcgi) がこのような動きをする PHP Script のリソースがリクエスト単位であることが重要
  8. 一部のWebサーバは、リクエストをスレッドで処理する。 そんなケースにも対応したものが ZTS ZTS (Zend Thread Safety 版) が想定する実行モデル。 Webサーバではリクエストをプロセスではなくスレッドで処理する分、 (特にWin32 で) パフォーマンスが改善されることがある 反面、リクエスト前後でマルチスレッド対応の処理(共有されるメモリ領域を分離して利用するための処理)が入るため、PHPのパフォーマンスは落ちる。
  9. NOP は何もしないopcode。 コンパイラの最適化によって複数の opcode が統合された際にはよくこうなる。
  10. それまでデフォルトだった CALL に変わり、PHP7.2で CALL にGOTO を混合させた HYBRID がデフォルトに x86、x86_64、PPC64 以外の CPU アーキテクチャではCALL にフォールバックする https://www.mail-archive.com/internals@lists.php.net/msg91158.html https://github.com/php/php-src/commit/27e01cd918dd3309571aa3628e6139d436b10e18 (マージされたコミット) https://github.com/php/php-src/commit/fc927dc263f95b98a1a64124cce6028185ebbd00 (7.2 系で Hybrid がデフォルトになったコミット)
  11. PHP Script で C言語をジェネレート
  12. Turn safe timeout handling into general interrupt handling ability. https://github.com/php/php-src/commit/d0460d8f6be04fc9493fc7db99d29168b46f3e72
  13. 基本は chunk 単位での確保 もっとも最小の割り当ては chunk をさらに細分した page に含まれる slot 単位となる
  14. php script でメモリが必要になった時、 内部では emalloc という関数(マクロ) が呼ばれる メモリは segment 単位で確保されるが、その際、実際に OS に対してメモリを確保するのは選択可能な storage_handler segment
  15. ZEND_MM_COMPACT は https://bugs.php.net/bug.php?id=41713 への対応によるものらしい
  16. 関数定義 と 関数呼び出しが 別の op_array として生成される