一般に、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说明安装成功了
#!/usr/bin/php #上面的是我自己的php路径 <?php $ip = msg_get_queue(12340); //创建一个队列 msg_send($ip,1,"Test a message",false,false,$err);//像队列中塞一条消息
#!/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"; //收到的消息在这里 }
以上が単一プロセスにおいて非同期性はそれほど重要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。