php でのマルチスレッドの簡単な分析~
マルチスレッド
PHP でマルチスレッドを実装するなんて?
PHP 自体はマルチスレッドをサポートしていないことはわかっていますが、Web サーバーはマルチスレッドをサポートしています。
つまり、複数の人が同時にアクセスできるということは、私がマルチスレッドを実装するための基礎でもあります。 PHP でスレッド化します。
今、ファイル a.php が実行されているとします。しかし、プログラムでは、WEB サーバーに別の b.php を実行するようリクエストします
。すると、2 つのファイルが同時に実行されます
( PS: リンクリクエストが送信された後、WEB サーバーはクライアントが終了したかどうかに関係なく実行されます)
場合によっては、実行したいのは別のファイルではなく、このファイル内のコードの一部である必要があります。実際、どのプログラムを実行するかはパラメータ .php で制御できます。
以下の例を見てください:
//a.php
PHP コード:----------- -------------------------------------------------------- -------------- -------
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $ errmsg);
fputs($fp, "GET /a .php?act=brnrn"); //ここの 2 番目のパラメーターは HTTP プロトコルで指定されたリクエスト ヘッダーです
//理解できない場合は、を参照してください。 RFC の定義
fclose($fp);
}
関数 a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double )microtime() . "rn");
fclose($fp); fopen('result_b.log', 'w');
fputs($fp , 'に設定' . Date('h:i:s', time()) . (double)microtime() . "rn") ;
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 つのファイルのアクセス時間を比較します。これら 2 つは実際に異なるスレッドで実行されていることがわかります。
まったく同じ場合もあります。
上記は単なる例であり、他の形式に改良することができます。
PHP もマルチスレッドを使用できるようになりました。問題が発生しました。それは、PHP 自体がマルチスレッドをサポートしていないことを知っています。それでは、
1 のような同期メソッドは存在しません。競合を避けるために同じリソースにアクセスしますが、データベースは同時操作をサポートしているため、データを書き込む必要がある場合は、他のファイルを使用しないでください。同期のためのメソッド...flock を呼び出してファイルをロックするなど。または、一時ファイル
を作成し、別のスレッドでこのファイルが消えるのを待ちます。 while(file_exits('xxx')); これは、一時ファイルが存在するということは、スレッドが実際に動作していることを意味します
そのようなファイルがない場合は、他のスレッドがすでにこれを解放していることを説明してください
2. runThreadがfputsを実行した後は、このソケットからデータを読み取らないようにしてください。 -threading では、ノンブロッキング モードを使用する必要があります。つまり、fgets
のような関数では、データの読み取りと書き込みに問題が発生します。ブロッキング モードを使用すると、プログラムはマルチスレッドではなくなります。 . 次のプログラムを実行する前に、上記の戻りを待つ必要があります。そのため、データを交換する必要がある場合は、最終的にファイルまたはデータ内の Completed を使用してください。
これには実際的な意味があるのでしょうか?
誰もが知っているように、ネットワーク リソースを常に読み取るアプリケーションでは、ネットワークの速度が重要になります。この形式を採用すると、
複数のスレッドで同時に異なるページを読むことができます
8848やsoasoなどのショッピングモールのWebサイトから情報を検索できるプログラムを作りました。アリババのウェブサイトからビジネス情報や企業ディレクトリを読み取るプログラムもあり、この技術も利用されています。 どちらのプログラムも、情報を読み取ってデータベースに保存するためにサーバーに継続的に接続する必要があるためです。 このテクノロジーを使用すると、応答を待つ際のボトルネックが解消されます。
これは議論を促進するためのものです、皆さんがもっと議論してくれることを願っています~~~~~~~

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
