0

私はかなり前からJavaWebアプリケーションを使用しています。PHPベースのWebアプリとJavaベースのWebアプリはどう違うのだろうと思っていました。セキュリティ、ライブラリの可用性などについていくつかの違いを見つけることができました。

基本的に、Java(サーブレット)ベースのWebアプリケーションはマルチスレッド環境であり、単一のプロセスによってさまざまな要求のニーズに対応します。これはPHPでどのように機能しますか?

a)すべてのリクエストは単一のプロセスですか?このような場合、メモリ使用率やその他の共有リソースを確実に管理するにはどうすればよいでしょうか。

b)PHPベースのWebアプリケーションにアプリケーションスコープ/シングルトンと呼ばれる概念はありますか?

c)接続プールを使用できますか?

基本的に、PHPはCGIとどう違うのですか?

この質問は、PHP開発者にとってはばかげているように聞こえるかもしれません。違いが文書化されている場所がすでにあることを知ってうれしく思います。ありがとう。

4

1 に答える 1

2

Java Web アプリケーションは、ステートフルで長時間実行される Java プロセスでホストされます (つまり、その中で実行されます)。このため、メモリ内オブジェクト キャッシングとスレッド操作機能を利用できます。

標準の CGI モデル (現時点では FastCGI を無視) はかなり単純です。プロセスが開始され、着信 HTTP 要求が渡されます。CGI プロセスは、要求自体を処理し (必要に応じて独自のスレッドの作成を含む)、子 CGI プロセスを生成したプロセスに HTTP 応答を返します。その後、CGI プロセスが終了します。そのため、メモリ内に保持されていたものはすべて失われ、データベースやディスク上のファイルなど、ある種の持続性メディアにシリアル化する必要があります。

(憶測: CGI の設計はおそらく、1990 年代初頭にサーバーで利用できるリソースが限られていたこと、および Web サイトがそれほど頻繁にアクセスされなかった方法に関係しているため、そのようにメモリを使用する意味がありませんでした。巨大なスケーラブルなプロジェクトの場合、専用の状態サーバーがあるため、メモリ内キャッシュにはおそらく関心がないでしょう)。

PHP は CGI システムであるため、「リクエストごとに 1 つのサーバー プロセス」というモデルの制限を継承しています。スレッドをサポートしないことに関しては、システムが大幅に簡素化されるため、PHP の開発者が意識的に決定したようです (たとえば、PHP はおそらく一番の「初心者向け言語」であるため、最近では、首を吊るすのに十分なロープを与えないのが理にかなっています) - さらに、Web サービスのシナリオでマルチスレッドを使用する必要がある場合は、PHP がおそらくそもそも使用するツールが間違っています。

PHP は CGI と同じです。PHP は CGI を実装しています。Java Web サーバーは CGI を使用しません (少なくとも Java アプリケーションにサービスを提供するためではなく、Java サーブレット ホストの CGI 実装が存在することに注意してください。ただし、複雑にすることは避けましょう)。

PHP はステートフルではないため、接続をプールできませんが、実際には問題ありません。PHP と MySQL を組み合わせると、操作が驚くほど安価であることがわかります。10 年前のマシンでも、データベースに接続し、SELECT からデータを取得し、適切にフォーマットされた HTML テーブルをすべて 5 ミリ秒未満で返すことができます。ページ生成時間が 30 ミリ秒未満に保たれている限り、どのプラットフォームを使用しても問題ありません (ユーザー エクスペリエンスを向上させるための私の個人的な目標時間制限)。

于 2012-09-21T06:05:47.100 に答える