ホームページ >バックエンド開発 >PHPチュートリアル >PHP 拡張機能の C++ シングルトン モードのグローバル オブジェクト インスタンスが複数の子プロセスによって生成および破棄されるのはなぜですか?解決方法

PHP 拡張機能の C++ シングルトン モードのグローバル オブジェクト インスタンスが複数の子プロセスによって生成および破棄されるのはなぜですか?解決方法

WBOY
WBOYオリジナル
2016-06-13 13:30:49987ブラウズ

PHP 拡張機能の C++ シングルトン モードのグローバル オブジェクト インスタンスが複数の子プロセスによって生成および破棄されるのはなぜですか? ?
PHP 拡張機能では、シングルトン モードのグローバル オブジェクトが使用されています。http サービスが停止したときに、ログを確認して、デストラクターが複数回、異なるプロセスで呼び出されていることがわかります。工程番号観察)。 なぜこんなことが起こるのか! http サービスが開始されると、グローバル オブジェクトが一度インスタンス化されるという意味ではないでしょうか? サービスが停止するとどうしてこんなにも怪奇現象が起こるのか!

-----解決策--------------------------------
デストラクターが複数回呼び出されたことはどのようにしてわかりますか?また、プログラム内で複数回インスタンス化されましたか?
------解決策------------------
HTTP リクエストに応答しているのは誰ですか? Apache、IIS...
HTTP リクエストにおける PHP の役割は何ですか? Web サーバーのアプリケーション

したがって、PHP に関連するすべての HTTP リクエストに対して、PHP プロセスがトリガーされます
拡張機能はダイナミック リンク ライブラリとして存在し、プロセス内ではプロセスは独立しています

拡張クラスをすべてのプロセスで共有したい場合は、php カーネルを変更する必要があります。ただし、どのシステムであっても、このカーネルはすべてライブラリとして提供されています。
------解決策------------------
PHP は CGI によって実行されるため、実際には継続的に構築と破棄が行われます。新しい PHP インタープリター プロセスが静的 C++ オブジェクトを含む多数の動的ライブラリをロードするたびに、各 PHP プロセスは同じ動的ライブラリをロードしますが、思い出は孤立する。

投稿者が fcgi を使用して php を実行する場合は異なります。新しい fcgi プロセスは、同時リクエストの数が現在の fcgi プロセスの数を超えた場合にのみ作成されますが、複数のプロセスによって共有されることはありません。
------解決策------------------

ディスカッション

が Apache で開始されます。それが私が言ったことであれば、php 拡張機能でグローバル オブジェクトを使用することはできません。気絶!
引用:

HTTP リクエストに応答しているのは誰ですか? Apache、IIS...
HTTP リクエストにおける PHP の役割は何ですか? Web サーバーのアプリケーション

したがって、PHP に関連するすべての HTTP リクエストに対して、PHP プロセスがトリガーされます
拡張機能はダイナミック リンク ライブラリとして存在し、そのプロセスでは Cheng Zhong は独立しています
……
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。