ホームページ  >  記事  >  バックエンド開発  >  マルチスレッドをシミュレートするためのPHP非同期実行方法(再版記事)

マルチスレッドをシミュレートするためのPHP非同期実行方法(再版記事)

WBOY
WBOYオリジナル
2016-06-13 13:11:32785ブラウズ

マルチスレッドをシミュレートするためのPHP非同期実行方法 (転載記事)
出典:
http://hi.baidu.com/aqw518/blog/item/1e5cd4116ec52244f919b840.html

PHP 自体にはマルチスレッドがありませんが、カーブを使用して同じ効果を作成できます。たとえば、非同期呼び出しを実現するマルチプロセス方法はコマンド モードに限定されます。

Web プログラムで使用できるもっと簡単な方法もあります。つまり、要求されたページ (URL. ) は、何かを非同期的に実行することと同じです。

キーコードは次のとおりです:

$fp = fsockopen('localhost',80,&$errno,&$errstr,5); >
if(!$fp)
{
echo "$errstr ($errno)
n";
}
fputs($fp,"GET another_page. php?flag =1rn");
fclose($fp);

上記のコードは、another_page.php ページにリクエストを送信し、無視します。 の応答データを待つ必要はありません。これを使用して、リクエストされたページ another_page.php が非同期的に何かを実行できます。

たとえば、非常に実用的なアプリケーションでは、新しいブログを公開するたびに、ブログのすべての購読者に電子メール通知を送信する必要があります。

ログを書き込んだ後 -> 送信ボタンをクリックします -> ログをデータベースに挿入します -> 公開が成功したことを作成者に通知します

成功プロンプトが表示されるまで送信ボタンを押すと、電子メール サービスへの接続が異常であるか、サーバーが遅いか、購読者が多すぎるなどの理由で、基本的に電子メールが送信されるまで長時間待機します。実際、メールの送信が成功したかどうかに関係なく、基本的にはログが正常に保存されていれば問題ないため、メールの送信を待つプロセスは非常に不経済です。このプロセスは非同期で実行できます。電子メール送信の結果は重要ではありません。または、フォームは将来の参照のために記録されます。

改善されたプロセスは次のとおりです:

ログの書き込み後 -> 送信ボタンをクリックします -> ログがデータベースに挿入されます ---> 公開の成功をライターに通知します

└ メール通知を送信する -> [ログを書き留める]

実際にプログラムを書いてテストします。 write.php と sendmail.php を使用します。 sendmail.php 内) を使用して、プログラムの実行にかかる時間をシミュレートします。

write.php、実行には 1 秒かかります:


function asyn_sendmail()
{
$fp = fsockopen('localhost ' ,80,&$errno,&$errstr,5);

if(!$fp)
{
echo "$errstr ($errno)
n" ;
}

sleep(1);

fputs($fp,"GET /sendmail.php?param=1rn"); #要求されたリソース URL は正しく記述されている必要があります

fclose($fp);
}

echo time().'
';

echo 'call asyn_sendmail
';

asyn_sendmail();

echo time().'
';

sendmail.php、実行には 10 秒かかります:

<

sleep(10);

fopen("C:" . time(), "w");

ページを通じて write.php にアクセスします。出力:

1272472697

call asyn_sendmail

1272472698

、C で: ファイルを生成:

1272472708

上記の結果から、sendmail.php には少なくとも 10 秒かかりますが、write.php の実行はブロックされず、このプロセスが非同期であることがわかります。

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