ホームページ  >  記事  >  バックエンド開発  >  PHP はマルチスレッドをサポートしていないので、同時実行の問題を考慮する必要はありません。この文は正しいですか

PHP はマルチスレッドをサポートしていないので、同時実行の問題を考慮する必要はありません。この文は正しいですか

WBOY
WBOYオリジナル
2016-08-04 09:21:511184ブラウズ

先ほども言いましたが、詳しい理由を教えていただけますか?

返信内容:

先ほども言いましたが、詳しい理由を教えていただけますか?

私たちが通常話している同時実行性のほとんどは、php ではなく、Apache nginx などのサービスに関するものです
さらに、php はマルチスレッドですが、日常的なプロジェクトでは使用されません

Threadを拡張するマルチスレッドクラスを定義する

実際、この文章自体が曖昧です。

まず前提条件を確認してください:

リーリー

PHP 言語コード自体は (ほとんどの場合)、マルチプロセスかマルチスレッドかは関係ありません。ただし、これは PHP がマルチスレッド/マルチ処理をサポートしていないという意味ではありません。 php-fpm はマルチプロセスおよびシングルスレッドであり、apeche のマルチスレッドモードはマルチスレッドです。 PHP は通常、プロセスやスレッドを PHP コード レベルで直接制御しません。

リーリー

前提が成立しないと結論に因果関係がなくなる。

これを言った人の本来の意図は次のとおりです。PHP は一般にプロセスとスレッドの制御をサポートしていないため、コードを通じてプロセスとスレッドを直接制御することによって同時実行の問題に対処することはできません。
そう言っても間違いではありません。

ただし、同時実行の問題は依然として同時実行の問題です。PHP コード自体が同時実行の問題の解決をサポートしていないからといって、同時実行の問題が存在するわけではありません。

PHP の同時実行性の問題を解決する従来の方法は、さまざまな構成調整 (nginx.conf、php-fpm.ini、php.ini) を経て、負荷分散を行うことです。これらは PHP コードではありませんが、PHPer としてマスターする必要がある PHP に密接に関係するものです。

さらに、PHP ロジックは特定のビジネス タイプに合わせて変更でき、フロントエンド呼び出しロジックも利用できます。 php-fpm を完全に放棄し、基本的に PHP での非同期同時実行をサポートする swoole などの拡張機能もあります (ただし、依然としてシングルスレッドです)。これらの同時実行の最適化方法は、特定のビジネスに基づいて選択する必要があります。

違う、あなたは間違っています!

PHP はマルチスレッドをサポートしていませんが、コマンド ライン プログラムのバックグラウンド操作や Web アプリケーションの php-fpm は複数のプロセスによって同時に処理されるため、たとえば 1 つの注文に 1 つの在庫があるなど、同時実行性の問題は避けられません。 、および 2 つの同時プロセス リクエストが同時に届いた場合、注文が売れすぎないようにするにはどうすればよいでしょうか?

マルチスレッドが考慮されていない場合でも、同時実行性は依然として存在しており、それを回避して最適化する方法を見つける必要があります

同時実行はマルチスレッドのみですか?これは狭すぎます

PHP は本質的にマルチスレッドをサポートしているため、スレッド セーフと非スレッド セーフには違いがあります。

PHP マルチスレッド拡張機能については、次を参照してください。
https://pecl.php.net/package/pthreads
この拡張機能。実用的な Real PHP マルチスレッド プログラミング サポートを提供します。これは通常、cli でのスクリプト プログラミングに使用されます。さらに、外国人の Feng Ge は、高性能リアルタイム ネットワークの開発をサポートする非同期マルチスレッド アーキテクチャを提供する拡張機能 Swoole も開発しました。 PHP を使用したサービス:
https://pecl.php.net/package/swoole
Swoole のマルチスレッドは、プログラマーが気にする必要はありません。一般的には、Swoole を構成するだけで済みます。 cli でのスクリプトプログラミングに使用されます

Nginx でよく使用される PHP FastCGI サービス PHP-FPM と同様に、プリフォーク MPM を使用する Apache と同様に、複数のプロセスを使用して同時実行に対するマルチコア応答を実装します。PHP-FPM はプロセス プール設定をサポートし、静的および動的プロセスをサポートします。番号設定、および Natural 透過的な「データベース接続プール」(永続的な接続)をサポートします:


PHP はマルチスレッドをサポートしていないので、同時実行の問題を考慮する必要はありません。この文は正しいですかMOD_PHP は、イベント MPM を使用して Apache で実行する場合にもマルチスレッド状態で動作します。これは、Apache イベント MPM がマルチプロセス マルチスレッド イベント駆動型 MPM であり、PHP が使用する必要があるスレッドセーフ バージョンであるためです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP構成Redis次の記事:PHP構成Redis