2000 年 10 月 20 日にリリースされた PHP 3.0.17 の最初の Windows バージョン以降、すべてのバージョンがスレッドセーフになっています。これは、マルチプロセス作業方式を使用する Linux/Unix システムとは異なり、Windows システムはマルチプロセスを採用しているためです。ねじ込み作業方式。 IIS で CGI モードで PHP を実行すると、CGI モードがマルチスレッドではなくマルチプロセスに基づいているため、非常に遅くなります。通常、PHP は ISAPI モードで実行されるように設定します。ISAPI はマルチスレッド モードであり、より高速です。しかし、一般的に使用される PHP 拡張機能の多くは、Linux/Unix のマルチプロセスの考え方に基づいて開発されており、これらの拡張機能を ISAPI モードで実行すると、エラーが発生して IIS がダウンします。スレッド セーフ バージョンを使用すると、最大でも特定のスレッドのみを通過し、IIS 全体のセキュリティには影響しません。
もちろん、CGI モードは IIS で PHP を実行する最も安全な方法ですが、CGI モードでは HTTP リクエストごとに PHP 環境全体をリロードおよびアンロードする必要があり、その消費量は膨大です。 IIS での PHP の効率とセキュリティを考慮するために、FastCGI ソリューションが提供されました。 FastCGI を使用すると、新しいリクエストごとにプロセスを再度開くのではなく、PHP プロセスを再利用できます。同時に、FastCGI では複数のプロセスを同時に実行することもできます。これにより、CGI プロセス モードの過剰な消費の問題が解決されるだけでなく、CGI プロセス モードにはスレッド セーフの問題がないという事実も利用されます。
したがって、ISAPI を使用して PHP を実行する場合は、スレッド セーフ (スレッド セーフ) バージョンを使用する必要があります。また、FastCGI モードを使用して PHP を実行する場合は、スレッド セーフ チェックを使用する必要はなく、None Thread Safe (NTS) を使用します。 、非スレッドセーフ)バージョンを使用すると、効率が向上します。
したがって、ISAPI を使用して PHP を実行する場合は、スレッド セーフ (スレッド セーフ) バージョンを使用する必要があります。また、FastCGI モードを使用して PHP を実行する場合は、スレッド セーフ チェックを使用する必要はなく、None Thread Safe (NTS、非スレッドセーフ) ) バージョンでは効率が向上します。
添付資料:道徳に関する質問の抜粋
PHP インストール ファイルをダウンロードすると、このページ http://windows.php.net /download/ にリストされているように、非スレッド セーフとスレッド セーフなどの 2 つの異なるバイナリ ファイルがあることがわかりました。これは何を意味しますか?またそれらの違いは何ですか?
これは主に Web サーバー用です。使用する Web サーバーが apchae または iis 7 以下の場合、Fast-cgi モードを使用する場合は、スレッドセーフなインストール ファイルを選択する必要があります。 Web サーバー自体がスレッドの安全性を保証できるため、スレッドの安全性が向上します。
もちろん、バイナリ ファイルをコンパイルするときに使用されるコンパイラもあります: vc9 (vs シリーズ) vc6 (gcc)
上で述べたように、一部の Web サーバーはアプリケーションのリクエストを処理するときにマルチスレッドを使用します。複数のプロセスを処理する場合、スレッド メソッドは共有レジスタとメモリを必要とするため、エラーが発生しやすくなります。このとき、プログラムはレジスタ内のデータの一貫性を処理する、つまりスレッドを確保するために余分な経験を費やす必要があります。安全性。
そのため、スレッド セーフを使用するかどうかは、主に Web サーバーで使用される PHP リクエストの処理方法に依存します。マルチスレッド処理の場合はスレッド セーフを選択し、そうでない場合は、前述したように、Fast-cgi メソッドを選択してください。スレッドセーフでないものを選択してください