php マルチスレッドは、php を初めて使用する多くの友人にとって、またそれが何に使用されるのか少し不明瞭です。そこで、今日は php マルチスレッドの実装事例について説明します。
今ファイル a.php を実行しているとします。しかし、プログラム内で別の b.php を実行するように WEB サーバーにリクエストすると、2 つのファイルが同時に実行されます。
(追記: リンクリクエスト)送信後、クライアントが終了したかどうかに関係なく、WEB サーバーはそれを実行します)
場合によっては、実行したいのは別のファイルではなく、このファイル内のコードの一部である場合、どうすればよいでしょうか?
実際、パラメータを使用して a.php を実行するプログラムを制御します。
例を見てみましょう:
//a.php PHP代码:-------------------------------------------------------------------------------- <?php function runThread() { $fp = fsockopen('localhost', 80, $errno, $errmsg); fputs($fp, "GET /a.php?act=b\r\n\r\n"); //这里的第二个参数是HTTP协议中规定的请求头 //不明白的请看RFC中的定义 fclose($fp); } function a() { $fp = fopen('result_a.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n"); fclose($fp); } function b() { $fp = fopen('result_b.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n"); fclose($fp); } if(!isset($_GET['act'])) $_GET['act'] = 'a'; if($_GET['act'] == 'a') { runThread(); a(); } else if($_GET['act'] == 'b') b(); ?> --------------------------------------------------------------------------------
result_a.log と result_b.log を開いて、2 つのファイルのアクセス時間を比較してください。これらは異なるスレッドで実行されます
まったく同じ場合もあります
上記は単なる例であり、
フォームに改良することもできます。 PHP もマルチスレッド化できるため、問題も発生します。 PHP 自体がマルチスレッドをサポートしていないことはわかっています。それでは、同じリソースにアクセスしないようにする必要があります。競合を避けるため、
データベースを同時に操作することができます。そのため、マルチスレッドPHPでは、同じファイルにデータを書き込まないでください。 .. たとえば、北京天安婦人科病院に電話してファイルをロックするなどします。または、一時ファイル
を作成し、別のスレッドでこのファイルが消えるのを待ちます。これは、while(file_exits('xxx')); と同等です。この一時ファイルが存在する場合は、スレッドが実際に動作していることを意味します。ファイルが存在しない場合は、runThread が fputs を実行した後、このソケットからデータを読み取らないようにしてください。マルチスレッドが必要な場合は、ノンブロッキング モードを使用する必要があります。つまり、fgets のような関数がすぐに返される場合、データの読み取りと書き込みに問題が発生します。ブロッキング モードを使用すると、プログラムはマルチスレッドではなくなります。以下のプログラムは戻った後にのみ実行されるため、データを交換する必要がある場合は、最終的に外部ファイルまたはデータを使用して完了することができます。
と言ったように、これには実際的な意味があるのでしょうか? 誰もが知っているように、継続的に実行するアプリケーションでは、答えは「はい」です。この形式を採用すると、
複数のスレッドで同時に異なるページを読み取ることができます:
の実装方法。 php マルチスレッド - シェル
PHP マルチスレッドの小さなケース
PHP マルチスレッド処理の問題について
以上がPHPマルチスレッド実装例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。