ホームページ >バックエンド開発 >PHPの問題 >PHPでマルチスレッド化する方法

PHPでマルチスレッド化する方法

(*-*)浩
(*-*)浩オリジナル
2019-10-08 09:16:273801ブラウズ

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

PHPでマルチスレッド化する方法

マルチスレッドは、プログラムの落ち着きを失わせる要因です。マルチスレッドを使用する前に、まずスレッドの安全性の問題を考慮する必要があります。

スレッド セーフティ: スレッド セーフティとはプログラミングの用語で、関数または関数ライブラリがマルチスレッド環境で呼び出されたときに、複数のスレッド間の共有を正しく処理できることを意味します。変数を使用してプログラム機能を正しく完了できるようにします。 (推奨学習: PHP ビデオ チュートリアル )

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

グローバル配列 $ が存在します。 arr = array('a');;

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

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

A スレッドは配列の長さを 1 に取得します配列要素 $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 までご連絡ください。