ホームページ  >  記事  >  バックエンド開発  >  phpのpthreadバックグラウンド処理について教えてください!

phpのpthreadバックグラウンド処理について教えてください!

WBOY
WBOYオリジナル
2016-06-23 13:49:101072ブラウズ

特定のリクエストの後にバックグラウンド スレッドを作成し、それを常に実行したいと考えています。スレッドは現在のリクエストをブロックしません。

実装プロセス中に、バックグラウンド スレッドが現在のリクエストをブロックし、Thread::detach が実行されるとページがデータを待機することになることが判明しました。公式ドキュメントには次のように記載されています。この方法の使用はお勧めしません。このエラーが次のことに関連しているかどうかはわかりません。


ディスカッションへの返信(解決策)
detach しないと、当然、子プロセスが終了するまで待つ必要があります

detach は既存のリクエストと競合する可能性が高くなります。拡張機能


この機能を実装するにはメッセージキューを使用することをお勧めします

マルチスレッドを使用するには? コードを 1 行だけバックグラウンドで実行するだけで、現在のプロセスはブロックされません。
exec("php task.php > /dev/null &")


デタッチの必要はありません 子プロセスの終了を待っていると、当然リクエストがブロックされます

デタッチすると、既存の拡張機能と競合します

この機能を実装するにはメッセージキューを使用することをお勧めします


通信データ量が比較的大きいため、メッセージキューは適していません。 コマンドパイプラインを使用するのが適していると思います。


マルチスレッドを使用する理由は何ですか? たった 1 行のコードでスクリプトをバックグラウンドで直接非同期に実行します。これにより、現在のプロセスがブロックされません
コードは次のとおりです: exec("php task.php > / dev/null &")

これも方法ですが、同時実行量が多いとリソースを消費しすぎるのが心配です。 これらの処理をバックグラウンドで実行したい理由は、時間がかかる。

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