ホームページ  >  記事  >  バックエンド開発  >  PHP の 5 つの IO モデルの詳細な紹介: ブロッキングとノンブロッキング

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

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-08 17:37:062553ブラウズ

この記事では、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 までご連絡ください。