ホームページ > バックエンド開発 > PHPの問題 > 単一プロセスにおいて非同期性はそれほど重要ですか?

単一プロセスにおいて非同期性はそれほど重要ですか?

醉折花枝作酒筹
リリース: 2023-03-11 16:32:01
転載
1332 人が閲覧しました

一般に、PHP のプログラムは単一のプロセスであり、1 つの文が実行されるまで次の文は実行されません。しかし、特定のリンクに引っかかるとプログラムを実行できなくなるため、この問題を解決するには別の非同期メカニズムが必要です。

単一プロセスにおいて非同期性はそれほど重要ですか?

通常、PHP のプログラムは単一のプロセスであり、1 つの文を実行した後、次の文 (PHP の pcntl_fork() 一連の関数) に進みます。ここでは使用しません。私の場合は、この方法の方がはるかに優れています)、教養があり、お腹を空かせた人々のグループと同じです(このご飯を食べないと死ぬかもしれません、誰もがこの食事を食べたいと思っています)できるだけ早く) 食べ物を買うために列に並ぶ 同様に、次のお金を買う前に 1 つの買い物を終えなければなりません。人が 1 角の小銭をすべて受け取った場合、次のお金を買う前に 1 角と 1 角のコインをすべて数えなければなりません。

実際に食べ物を買う列に1、2秒遅れるのは問題ではないかもしれませんが、ユーザーに迅速に対応する必要があるシステムでは、この現象が発生すると厄介です。完全なログイン操作のようなものです。多くのステップがあります。ステップごとに実行すると、1 つのステップで行き詰まったら終了します。ユーザーには、読み込みボタンが回転し続けることがわかります...このとき、この問題を解決するにはメカニズムが必要です。

まず、PHP のプロセス間通信拡張機能 sysvmsg について学びましょう。この拡張機能は linux/uinux でのみ使用でき、他のプラットフォームでは無効であることに注意してください。私の環境は centos6 です。 3. この拡張機能をインストールするのは非常に困難です。簡単:

yum -y install php-process
ログイン後にコピー

もちろん、php をインストールしていることが前提です。実行後、次のコマンドを使用して、インストールが成功したかどうかを確認します。 #

php -m | grep sysvmsg
#若果看到sysvmsg说明安装成功了

#或者也可以这样
php -r 'var_dump(function_exists("msg_get_queue"))';
#若果看到true说明安装成功了
ログイン後にコピー

もちろん、上記のコマンドは php パスをシステム環境変数に追加する必要があります。

この拡張機能はプロセス間で通信できます。例を見てみましょう。

Send、send.php

#!/usr/bin/php
#上面的是我自己的php路径
<?php
$ip = msg_get_queue(12340);
//创建一个队列
msg_send($ip,1,"Test a message",false,false,$err);//像队列中塞一条消息
ログイン後にコピー

Accept、receive.php

#!/usr/bin/php
<?php
$ip = msg_get_queue(12340);
//创建消息队列,和发送的要一致,不然收不到消息
while(msg_receive($ip,0,$msgtype,512,$data,false,null,$err)){
    echo "使用内存: ".memory_get_usage()."\n";
    //这里看下使用了多少内存
    echo "收到的消息: $data\n";
    //收到的消息在这里
}
ログイン後にコピー
プログラムを実行すると、メッセージの送受信が標準FIFOに従っていることがわかります。これらの特性により、非同期システムを設計できます。

これらの機能の使い方について考えてみると、プログラムの実行時には必ず多くの操作が発生します。常に実行する必要がある操作もあれば、遅延させることができる操作もあれば、実行しなければならない操作もあります。本質的には重要ではなく、かなりの時間がかかります。

たとえば、ログインログを記録したり、ゲームの詳細を記録したりしますが、このとき、プログラムの完了を待つ必要はありません(待っていると問題が発生する可能性があります。数が多すぎると、重要ではない操作、多くの無駄が発生します。時間) ですが、操作対象のものを直接キューに投入します。

次に、受信したメッセージを実行するためにバックグラウンドで別のプロセスを開きます。これは、プログラムの実行中にすぐにプログラムを実行しないことによる時間の無駄の問題をうまく解決できませんか?

推奨学習:

php ビデオ チュートリアル

以上が単一プロセスにおいて非同期性はそれほど重要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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