ホームページ  >  記事  >  バックエンド開発  >  ブロッキング PHP プログラムと非ブロッキング PHP プログラムの違いは何ですか?

ブロッキング PHP プログラムと非ブロッキング PHP プログラムの違いは何ですか?

WBOY
WBOYオリジナル
2022-03-18 12:18:092346ブラウズ

ブロッキング PHP プログラムと非ブロッキング PHP プログラムの違いは、ブロッキング呼び出しの結果が返される前に、現在のスレッドは一時停止され、呼び出し元は実行を継続しません。また、ノンブロッキング呼び出しの結果が返される前は、返された場合、呼び出しは現在のスレッドをブロックせず、実行を継続します。

ブロッキング PHP プログラムと非ブロッキング PHP プログラムの違いは何ですか?

この記事の動作環境: Windows 10 システム、PHP バージョン 7.1、Dell G3 コンピューター。

ブロッキング PHP プログラムとノンブロッキング PHP プログラムの違いは何ですか?

ブロッキングとノンブロッキングでは、呼び出し結果 (メッセージ、戻り値) を待っているときのプログラムのステータスに重点が置かれます。 ).

ブロッキング呼び出しは、呼び出し結果が返される前に現在のスレッドが一時停止されることを意味します。呼び出しスレッドは、結果を取得した後にのみ戻ります。

ノンブロッキング呼び出しとは、結果がすぐに得られなくなるまで呼び出しが現在のスレッドをブロックしないことを意味します。

1.php 同時実行のブロック

PHP にとって同時実行は問題です。データベースに書き込む前にデータが存在するかどうかを判断するために、作業中にいくつかのクエリが発生することがよくあります。同時実行性があると、データが繰り返し書き込まれることになり、判断が間違ってしまいます。したがって、ブロックを使用する場合は、リクエストを 1 つずつ実行する必要があります。

簡単な紹介:

1. まず、読み取り/書き込みモードで lock.txt ファイルを開くか作成します

2. ロックに「排他ロック」を適用します。 txt ファイルを作成し、ロックが成功したら、次のステップ「注文商品データの処理」に進むことができます。

3. データの処理後、「ロックを解除」して、開いているファイルを閉じる必要があります。

注: ファイルを「排他ロック」した後、内部に「ロックの解放」がない場合、非常にスタックした状況になります。

public function index(){
    $fp = fopen("lock.txt", "w+");
    if(flock($fp,LOCK_EX))
    {
        $find=Db::name('user')->where('username','name2')->find();
        if($find){
            $data['username']='name3';
            $data['password']='';
            $data['password_m']='';
            Db::name('user')->insert($data);
        }else{
            $data['username']='name2';
            $data['password']='';
            $data['password_m']='';
            Db::name('user')->insert($data);
        }
        flock($fp,LOCK_UN);
    }
    fclose($fp);
    return 'success';
}

注: 小規模な同時実行では可能ですが、パフォーマンスには大きな影響はありません。同時実行数が 500 未満であることが望ましいです。同時実行数が高すぎる場合は、キュー モードを使用することをお勧めします。

2.php ノンブロッキング モード

ノンブロッキング モードは、サードパーティの API インターフェイスを呼び出すための php プログラムや、サードパーティの API インターフェイスを呼び出す必要のないプログラムでよく使用されます。結果を待ちます。

簡単な例を挙げてください。メールを送信するには、すべての上司に送信する必要があるため、すべてを一度に送信する必要があります。おそらく、ループを作成する必要があります。このループ内でメールを送信するメソッドには実行時間が必要で、値を返して次回実行します。ループします。この時間は順番に累積され、最終的な時間は非常に長くなります。

これをブロッキングと呼びます。常に待機せずに過去を送信することが必要です。戻りデータの場合、ループします。一度実行するだけで、必要なのはノンブロッキング モードです。この種の状況に対して、PHP にはこれを処理する優れた関数がありません。そのため、最もよく行うのは、メールをキューに入れることです。メールを送信するとき、

はキューに従って実行されますが、実際には、ブロッキング モードは引き続き使用されます。ただし、リクエストの実行時間は非常に短くなります。最も一般的に使用されるのは API インターフェイスを呼び出すことであり、この時点では戻り値は気にしません。

推奨学習: 「PHP ビデオ チュートリアル

以上がブロッキング PHP プログラムと非ブロッキング PHP プログラムの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。