ホームページ  >  記事  >  バックエンド開発  >  PHP はノンブロッキングおよびマルチスレッド プログラミングを実装します

PHP はノンブロッキングおよびマルチスレッド プログラミングを実装します

不言
不言オリジナル
2018-07-20 17:09:582295ブラウズ

PHP マルチスレッド プログラミング実装とノンブロッキング実装。 PHP はデフォルトではマルチスレッドをサポートしていません。マルチスレッドを使用するには、pthread 拡張機能をインストールする必要があります。インストール後、マルチスレッド プログラミングを実行できます。

スレッドの概念

スレッドは、オペレーティング システムがスケジュールできる最小単位です。

マルチスレッド プログラムは、オペレーティング システムによってスケジュールされる可能性が高くなります。シングルスレッド プログラムよりもオペレーティング システムが大きいため、マルチスレッド プログラムは一般にシングルスレッド プログラムよりも効率的です。

マルチスレッド プログラムの複数のスレッドは、マルチコア CPU の複数のコアで実行できます。同時に、マルチコアマシンの利点を最大限に活用します;

スレッドの作成と切り替えにかかるシステムのオーバーヘッドはプロセスのオーバーヘッドよりも小さいため、複数のプロセスよりもある程度効率的です;

スレッドは共有メモリ空間で生まれ、スレッド間の通信がより簡単になり、プロセス IPC による新たな複雑さの導入を回避します。

スレッドを使用する場合

I/O ブロックにより、オペレーティング システムがタスクをスケジュールし、現在のタスクがブロックされるため、大量の I/O がある場合コード内では、マルチスレッドを使用するとコードを並列化できます。

マルチスレッドはCPUを最大限に活用できるため、大きな計算コードが複数ある場合はマルチスレッドを使用して実行することもできます。スレッドの良い点と悪い点

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

サブスレッドが実行を開始すると、メインスレッドは実行中のサブスレッドの詳細を調整できなくなります。

拡張インストール

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

./configure --enable-maintainer-zts --with-tsrm-pthreads

class Request extends Thread {    public $url;    public $response;    public function __construct($url) {        $this->url = $url;
    }    public function run() {        $this->response = file_get_contents($this->url);
    }
}
$chG = new Request("www.google.com");
$chB = new Request("www.baidu.com");
$chG ->start();
$chB ->start();
$chG->join();
$chB->join();
$gl = $chG->response;
$bd = $chB->response;
PHP ノンブロッキング

fastcgi_finish_request() を使用する

echo "program start...";
fastcgi_finish_request();
sleep(1);echo 'debug1...';
sleep(10);echo 'debug2...';

fsockopen を使用する( )

stream_set_blocking()

cURL
$cmh =curl_multi_init();

Gearman/Swoole 拡張機能を使用

キャッシュとキューを使用

redis

システム コマンドの呼び出し
$cmd = 'nohup php ./processd.php $someVar >/dev/null &';

pcntl_fork()を使用します

PHP ネイティブ サポート

yield

関連する推奨事項:


php インストール スレッド マルチスレッド拡張機能、phpthreads マルチスレッド

以上がPHP はノンブロッキングおよびマルチスレッド プログラミングを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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