ホームページ  >  記事  >  バックエンド開発  >  php マルチスレッド pthreads のインストールと使用、php マルチスレッド pthreads_PHP チュートリアル

php マルチスレッド pthreads のインストールと使用、php マルチスレッド pthreads_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:00:35832ブラウズ

php マルチスレッド pthreads、php マルチスレッド pthreads のインストールと使用

Pthreads をインストールするには、基本的に PHP を再コンパイルして --enable-maintainer-zts パラメーターを追加する必要がありますが、これを使用するためのドキュメントはほとんどありません。多くのバグ 本番環境でのみ解決できる予期せぬ問題がたくさんあるので、実際にマルチスレッド化するには、やはり Python、C などを使用する必要があります。

以下のコードのほとんどはインターネットから取得したものです

1.インストール

ここで使用されているのはphp-7.0.2です

リーリー

pthreadsをインストールする

リーリー

2. スレッド

リーリー

3. ワーカーとスタッカブル

リーリー リーリー

4.ミューテックスロック

ミューテックスロックはどのような状況で使用されますか?複数のスレッドを制御する必要があり、同時に動作できるスレッドが 1 つだけである場合に使用できます。ミューテックスロックの有無による違いを示す簡単なカウンタープログラム

リーリー

複数のスレッドと共有メモリ

共有メモリの例では、ロックは使用されていないため、作業メモリの操作自体がロックの機能を持っている可能性があります

。 リーリー

5. スレッドの同期

一部のシナリオでは、thread->start() でプログラムの実行を開始したくないが、スレッドがコマンドを待機するようにしたい場合があります。 $thread->wait(); のテスト関数は、スレッドが thread->start() の直後に実行されるのではなく、$thread->notify(); からのシグナルを受信した後にのみ実行されます。 リーリー

6. スレッドプール

プールクラス

リーリー

動的キュースレッドプール

上記の例は、スレッド プールがいっぱいになったときに start を実行するものです。次の例は、スレッド プールにアイドル時間ができるとすぐに新しいスレッドを作成します。

リーリー

pthreads プールクラス

リーリー

7. マルチスレッドのファイルの安全な読み取りと書き込み

    LOCK_SHは共有ロックを取得(プログラム読み込み)
  • LOCK_EX 排他ロックを取得(
  • で書かれたプログラム)

  • LOCK_UN はロックを解放します (共有か排他かに関係なく)
  • ロック時に flock() をブロックしたくない場合は LOCK_NB
  • リーリー
  • 8. マルチスレッドとデータ接続

pthread と pdo を同時に使用する場合、注意すべき点の 1 つは、public static $dbh; を静的に宣言し、シングルトン モードでデータベース接続にアクセスする必要があることです。

労働者とPDO

リーリー

プールとPDO

スレッドプール内のデータベースに接続します

リーリー

上記のプログラムをさらに改善するために、シングルトン モード $this->worker->getInstance(); を使用してグローバルに 1 つのデータベース接続のみを作成し、スレッドは共有データベース接続を使用します

リーリー

データベースをマルチスレッドで動作させる概要

一般的に、pthreads はまだ開発中であり、まだいくつかの欠点がありますが、pthreads の git がこのプロジェクトを継続的に改善していることもわかります。

永続的なデータベース接続は非常に重要です。そうでないと、各スレッドがデータベース接続を一度開いてから閉じることになり、多くの接続タイムアウトが発生します。

リーリー

http://www.bkjia.com/PHPjc/1093101.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1093101.html技術記事 php マルチスレッド pthreads、php マルチスレッド pthreads のインストールと使用。Pthreads をインストールするには、基本的に PHP を再コンパイルして --enable-maintainer-zts パラメーターを追加する必要がありますが、このドキュメントはほとんど使用されません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。