ホームページ  >  記事  >  バックエンド開発  >  PHP は将来マルチスレッドをサポートしますか?

PHP は将来マルチスレッドをサポートしますか?

(*-*)浩
(*-*)浩オリジナル
2019-09-26 10:26:461786ブラウズ

PHP は将来マルチスレッドをサポートしますか?

PHP でのマルチスレッド

PHP はデフォルトではマルチスレッドをサポートしていません。マルチスレッドを使用するには、 pthread.extension をインストールする必要がある場合は、--enable-maintainer-zts パラメータを使用して PHP を再コンパイルする必要があります。このパラメータは、PHP のコンパイル時にスレッド セーフを使用することを指定します。

スレッド セーフティ (推奨学習: PHP プログラミングの入門から習熟まで )

マルチスレッドはプログラムを不安定にする要因です。マルチスレッドを使用する場合は、まずスレッド セーフティの問題を考慮する必要があります。

スレッド セーフティ: スレッド セーフティとはプログラミングの用語で、マルチスレッドで呼び出されたときに関数または関数ライブラリが正しく処理できる能力を指します。複数のスレッド間で変数を共有することで、プログラムの機能を正しく完了できます。

従来のマルチスレッドでは、複数のスレッドが変数を共有するため、次の問題が発生する可能性があります。

グローバル配列 $arr = array(' a');;

A スレッドは配列の長さを 1 に取得します;

B スレッドは配列の長さを 1 に取得します;

A スレッドがポップアウトします配列要素 $a = array_pop($arr); $a = 'a';;

B スレッドも配列要素をポップします$b = array_pop($arr); $a = null;;

このとき、B スレッドで超自然的なイベントが発生しました。配列の長さが明らかに 0 より大きいか、何かがポップされていませんでした。

#PHP 実装

#PHP によって実装されるスレッド セーフティは、主に TSRM メカニズムを使用してグローバル変数と静的変数を分離します。グローバル変数と静的変数は各スレッドにコピーされます。各スレッドはメイン スレッドのバックアップを使用するため、変数の競合を回避し、スレッドを排除します。安全上の問題が発生する可能性があります。

PHP のマルチスレッド カプセル化により、スレッドの安全性が確保されます。プログラマは、読み取りと書き込みの競合を避けるために、グローバル変数にさまざまなロックを追加することを考慮する必要がなくなりました。また、エラーの可能性が減り、記述されたコードの安全性が高まります。

しかし、その結果、サブスレッドが実行を開始すると、メインスレッドはサブスレッドの実行の詳細を調整できなくなり、スレッドはグローバル変数を介してスレッド間でメッセージを送信する機能を失います。ある程度です。

同時に、PHP がスレッド セーフ オプションをオンにすると、TSRM メカニズムを使用して変数を割り当てて使用するときに追加の損失が発生するため、マルチスレッドを必要としない PHP 環境では、 PHP の ZTS (非スレッド セーフ) バージョンを使用してください。

以上がPHP は将来マルチスレッドをサポートしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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