ホームページ >バックエンド開発 >PHPチュートリアル >PHPの動作原理がよくわかりません。解決策を教えてください。
Javaやnodejsと同様、サーバー上で継続的に実行されるプログラムである必要があり、このプログラムは常に実行され、CPUとメモリを占有し、ネットワークリクエストを受信すると処理します。
PHP はプログラムではなく、HTML に似ています。PHP サービスにアクセスしないときのみ実行され、少しのメモリも占有しません。 CPU それは本当ですか?
そうであれば、PHP でデータベース クラスをカプセル化するのは難しくないでしょうか?これは、各ユーザーが入ってきて自分に代わってプロセスを開く必要があり、そのプロセスが相互に接続されていないためです。ユーザー A が入ってきてその人のデータベース接続を開き、ユーザー B が入ってきてその人の代わりに別のデータベース接続を開きます。では、PHP はデータベースに接続したり切断したりを繰り返しているのではありませんか?ユーザーが増えると、オーバーヘッドが非常に高くなるはずです。
これがphpにjsのようなsetInterval
或者 setTimeout
関数がない理由でもあるのでしょうか?
Javaやnodejsと同様、サーバー上で継続的に実行されるプログラムである必要があり、このプログラムは常に実行され、CPUとメモリを占有し、ネットワークリクエストを受信すると処理します。
PHP はプログラムではなく、HTML に似ています。PHP サービスにアクセスしないときのみ実行され、少しのメモリも占有しません。 CPU それは本当ですか?
そうであれば、PHP でデータベース クラスをカプセル化するのは難しくないでしょうか?これは、各ユーザーが入ってきて自分に代わってプロセスを開く必要があり、そのプロセスが相互に接続されていないためです。ユーザー A が入ってきてその人のデータベース接続を開き、ユーザー B が入ってきてその人の代わりに別のデータベース接続を開きます。では、PHP はデータベースに接続したり切断したりを繰り返しているのではありませんか?ユーザーが増えると、オーバーヘッドが非常に高くなるはずです。
これがphpにjsのようなsetInterval
或者 setTimeout
関数がない理由でもあるのでしょうか?
PHP-FPM を例として (Apache MOD_PHP と同様)、PHP の動作メカニズムについて説明します
まず第一に、PHP-FPM は C で実装されたマルチプロセス FastCGI サービスです。
各 PHP-FPM ワーカー プロセスは、組み込みの PHP インタープリターは PHP-CGI に依存せず、構成などの常駐バックグラウンドをサポートします。
リーリー
実行タイムアウトと放棄、指定された数のリクエストを処理した後のワーカープロセスの自動再起動、スローロギング(時間のかかるファイルや関数の発見)など、すべてがサポートされています。
そして、永続的な接続を有効にした後、各 PHP-FPM 作業プロセスは、解放せずに MySQL への長い接続を維持することができ、データベースへの繰り返しの接続を回避できます。
さらに、Memcached および Redis の PECL 拡張機能も永続的な接続の機能を実装します。
PHP-FPM システムについては上で説明しましたが、ここで PHP-FPM システムにおける PHP スクリプトのライフ サイクルについて説明します。
リソースはリクエストごとに 1 回解放されます。この種のメモリ解放は、プログラムが有効になる前に終了します。ここでのリソースの解放とは、スクリプト内で制御されるリソースであり、PHP-FPM の常駐プロセスに干渉せず、PHP-FPM プロセスをシャットダウンさせず、PHP-FPM に永続的な接続を閉じさせません。 PHP-FPM は、PHP スクリプトを入力して PHP 操作を実行することのみを担当します。ZendOpcache サポートが追加されている場合、PHP スクリプトの解析によって生成されたすべてのオペコードは、次回の直接解釈と実行のためにメモリにキャッシュされます。 opcache.file_cache を使用してスクリプトのオペコードをエクスポートし、ソース コードの保護を実現します
PHP に関する常識:
データベース接続プール: PHP 永続接続は、プログラム介入を必要としない自然で透過的な接続プールであり、MySQL/Memcached/Redis などをサポートします。
ガベージ コレクション: リクエストごとに 1 回リソースを解放する PHP-FPM の動作モードは、参照カウントに基づく GC の役割を弱めます。
最後に、CLI で動作する Swoole/WorkerMan などの PHP デーモン サービスは Java/Node に似ています。
私はすでに仕事を終えていますが、あなたの言及を見ましたPHP
是类似html
我忍不了。PHP
功能是html
无法比拟的好不好,就拿你说的连接数据库的例子来说,html
能连接数据吗?能读取数据库内容吗?不能吧!还有你说多个用户来访问每个用户都要开一个数据库连接,你这样太小看PHP
了。封装一个数据库连接类很简单很简单,这些我就不贴code
了。PHP手册每种数据库扩展都有介绍也有事例,你可以自己做参考。你既然提到java
那肯定也知道单例模式吧!PHP
封装好一个数据库连接类设置单例模式就可以实现数据连接静态化。不管多少用户来访问直接调用一下就可以不是你说的多个用户来访问就开多个进程。还有你提到的setInterval
和setTimeout
不就是定时执行吗!PHP
也可以的啊!首先定义好PHP要实现的功能,然后通过在服务器上设置crontab
就可以了,参数自己设置就行,或者还有php-fpm
。機能などは記載しませんし、回答もまだ整形していないので、まずは見ていただければと思います。仕事を終えて出発しなければなりません。質問がある場合は、明日も引き続き話し合いましょう。
は非常に強力な機能を備えた非常に優れた言語です...そして今も開発と成長が続いています...学習と理解が簡単です!兄弟PHP
PHP はメモリに常駐できません。各 HTTP リクエストが開かれた後、リクエストが終了するとデータベース接続とさまざまな変数が解放されます。
全体的な理解は正しいですが、すべての言語が Java や Python、go、C のようにメモリ常駐するわけではありません。 PHP には接続プールの概念がありません。プロセスは実行後に解放され、他のプロセスが使用できるように残されることはありません。
これは、「PHP コアの詳細な理解」の第 2 章の最初のセクションへのリンクです:
http://www.php-internals.com/...
あなたの疑問は、あなたが表面しか見ていないからです。
swooleを使ったことがある方ならこんな質問はしないと思います。
ああ、php-fpm が到着しないと思ったでしょう。 。 。
そして、PHP はプログラムではないようで、HTML に似ています
PHP サービスにアクセスしないときのみ実行されます。PHP は少しのメモリや CPU も占有しません。PHP は HTML にのみ埋め込むことができますが、PHP にはさまざまな機能を提供する拡張機能があり、HTML とはまったく異なります。
1. Apache によって表される Mod_php、この時点で作業は Apache に引き渡されます。PHP には主に 2 つの実行モードがあります (CLI を除く):
2.php-fpm (fastcgi プロセス マネージャー) Nginx/Lighttpd によって使用され、これは常駐デーモン プロセスです。
それでは、どうすればCPUとメモリを占有しないで済むのでしょうか?
PDO には長時間接続オプションもあります。MySQL を例に挙げます。接続時に pconnect (永続的な接続) を選択すると、次回からは既存の接続が直接使用され、接続は閉じられません。
関数がない理由でもあるのでしょうか?など)があり、その精度はJSよりもはるかに高い(マイクロ秒レベル)。PHPには遅延関数(
setInterval
或者setTimeout
sleep()
実際、元の投稿者の質問に答えると、PHP の動作メカニズムはスクリプトを解釈して実行することだと思います。 PHP は、小規模および中規模の Web サイトにサーバー側のサポートを提供するスクリプト言語です。これが、開発速度と運用効率のバランスが取れていることが成功の理由です。
つまり、投稿者の他の意見にはほとんど価値がなく、もし PHP があなたが想像しているようなものを持っているなら、誰もこの言語を使用しないでしょうし、誰もが Java を使用するのと同じかもしれません。
著者は PHP の基本的な知識がありません。PHP を初めて使用する必要があります。簡単に言うと、PHP は 2 つのモードで実行できます。1 つはシェルで php xxx.php を実行するようなスクリプト モードで、もう 1 つはネットワーク リクエストがあった場合にのみ実行を開始するモードです (あまり適切ではありません)。一部は Apache 拡張モードにコンパイルされますが、高速 CGI モードもあります。 Apache の mod_php メソッドは、リクエストによって実行するプロセスを開始します。これは非常に効率的であり、それに応じてさまざまなパラメーターが最適化されます。 Fast-cgi は、特定の投稿者が対応するマニュアルを読んで実践することができるため、より効率的です。
上の階の人たちはとても忍耐強いです