ホームページ >バックエンド開発 >PHPチュートリアル >PHPマルチスレッドの実装方法と活用例を詳しく解説、PHPマルチスレッド事例を詳しく解説_PHPチュートリアル
次に、具体的なPHPマルチスレッド実装プログラムのコードを紹介します。より詳しく知りたい学生はそれを参照してください。 。
同時実行機能を実装したい場合、通常はフォークまたは生成スレッドの使用を考えますが、PHP がマルチスレッドをサポートしていないことがわかると、考えを変え、perl などの十分ではない言語を使用する可能性があります。
実際、ほとんどの場合、フォークやスレッドを使用する必要はなく、フォークやスレッドを使用するよりもパフォーマンスが向上します。
実行中の n サーバー をチェックして、それらがまだ適切に機能していることを確認するサービスを構築するとします。次のようなコードを書くとよいでしょう:
コードは次のとおりです
正常に動作しますが、このコードを拡張して多数のサーバーを管理するには、 fsockopen() がホスト名を解析して正常な接続を確立するまで (または $timeout 秒遅れて) 長い時間がかかります。
したがって、このコードを放棄する必要があります。fsockopen が接続ステータスを返すのを待つ必要がなく、非同期接続を確立できます。 PHP は依然としてホスト名を解決する必要があります (したがって、IP を直接使用する方が賢明です) が、接続を開いた後すぐにホスト名が返されるため、次のサーバーに接続できます。
実現するには 2 つの方法があります: PHP5 では、新しい stream_socket_client() 関数を使用して fsocketopen() を直接置き換えることができます。 PHP5 より前のバージョンの場合、問題を解決するには自分で実行し、ソケット拡張機能を使用する必要があります。
PHP5 での解決策は次のとおりです:
コードは次のとおりです
stream_select() を使用して、ソケットが開く接続イベントを待ちます。 stream_select() は、システムの select(2) 関数を呼び出して機能します。最初の 3 つのパラメータは、使用するストリームの配列であり、(3 つのパラメータごとに) 読み取り、書き込み、例外の取得が可能です。 stream_select() は、$timeout (秒) パラメーターを設定することでイベントが発生するのを待つことができます。イベントが発生すると、渡したパラメーターに対応するソケット データが書き込まれます。
以下は 4.1.0 以降の PHP バージョンの実装です PHP をコンパイルするときにソケット (ext/sockets) サポートを組み込んでいる場合は、上記のストリーム/ファイルシステム関数を変更するだけで、上記と同様のコードを使用できます。この関数は ext/sockets 関数を使用して実装されます。主な違いは、stream_socket_client() の代わりに次の関数を使用して接続を確立することです:
コードは次のとおりです
ここで、stream_select() をsocket_select()、fread() をsocket_read()、fwrite() をsocket_write()、fclose() をsocket_close()に置き換えて、スクリプトを実行します。
PHP5 の高度な点 は、stream_select() を使用してほぼすべてのストリームを処理できることです。たとえば、これを使用して、STDIN を含めてキーボード入力を受け取り、配列に保存したり、パイプを受け取ることもできます。 proc_open() データ入力を通じて開かれます。
PHPマルチスレッドクラスを共有しましょう
コードは次のとおりです
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。