PHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキング

醉折花枝作酒筹
リリース: 2023-03-10 12:42:01
転載
2539 人が閲覧しました

この記事では、PHP の 5 つの主要な IO モデルのブロッキングとノンブロッキングについて詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキング

ブロッキング: アプリケーションがユーザー空間に戻る前に IO 操作を完了する必要があることを意味します。 IO 操作の実行時にブロックされます。ステータス値は、IO 操作が完全に完了するのを待たずに、呼び出し直後にユーザーに返されます。

ブロッキング モデル:

PHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキングノンブロッキング モード:

PHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキングブロッキング モードでは、ユーザーはプロセスはカーネル状態データを待ち続けるため、効率が非常に低くなります。たとえば、シャオミンが水を沸騰させたいとき、水が沸騰するまで待たなければなりませんが、実際には、シャオミンは水を沸騰させる過程で他のことをすることができます。

最適化はノンブロッキング モードです。ユーザー プロセスが IO 操作を実行すると、カーネル状態はすぐに値を返しますが、通常は空です。ユーザー プロセスは、カーネル状態データが返されるまで他のことを行うことができます。実際の実行結果の取得をリクエストします。上記のシャオミンの例で言えば、シャオミンは水を沸騰させているとき、本を読み、水が沸騰しているかどうかをしばらく見て、水が沸騰しているかどうかを確認し、同時に本を読むことができますそして勉強。

パフォーマンス分析:

プログラムが 2 つの操作 a と b を実行する必要があり、a は IO 操作を実行する必要があり、b は実行しないとします。ブロッキング モードでは、消費時間は a b に等しくなりますが、非ブロッキング モードでは、a と b の最大時間消費操作に等しくなります。

サーバー コード:

$server = stream_socket_server('tcp://127.0.0.1:9999', $erron, $error);
while (true) {
 $conn = stream_socket_accept($server);
 if ($conn) {
 $data = fread($conn, 65535);
 echo $data;
 sleep(3);
 fwrite($conn, 'this is server');
 fclose($conn);
 }
}
ログイン後にコピー

ブロッキング クライアント:

function operation()
{
 sleep(2);
}
echo "client start n";
$client =  stream_socket_client('tcp://127.0.0.1:9999', $erron, $error, 60);
fwrite($client, "is client 1n");
echo fread($client, 65535);
operation();
fclose($client);
ログイン後にコピー

非ブロッキング クライアント:

function operation()
{
 sleep(2);
}
echo "client start n";
$client =  stream_socket_client('tcp://127.0.0.1:9999', $erron, $error, 60);
stream_set_blocking($client, 0);//设置非阻塞
fwrite($client, "is client 1n");
operation();
while (!feof($client)) {
 sleep(1);
 var_dump(fread($client, 65535));
}
fclose($client);
ログイン後にコピー

時間消費:

ブロッキング モード

PHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキングノンブロッキング モード

PHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキング推奨学習:

php ビデオ チュートリアル

以上がPHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!