ホームページ > バックエンド開発 > PHPチュートリアル > PHP が長時間ハングする問題を解決するにはどうすればよいですか?

PHP が長時間ハングする問題を解決するにはどうすればよいですか?

WBOY
リリース: 2016-06-23 14:27:42
オリジナル
1706 人が閲覧しました

a.php は 2 ページあり、リモートデータを読み取ってデータベースに保存します。1 回の実行に 30 秒以上かかります。
b.php は、データベースの最新の内容を読み取り、それを表示する責任があります。

問題: a.php がまだ読み込まれていない場合 (ブラウザのステータス バーに常に「192.168.1.100 からの応答を待機しています」と表示される)、データベースの内容をリアルタイムで確認するために b.php を手動で更新します。 , しかし、このとき b.php も固まってしまいます(ブラウザのステータスバーにも常に「192.168.1.100 からの応答を待っています」と表示されます)。 a.php が実行されない場合でも、b.php は遅延なく迅速に応答します。
ぜひ答えてほしいです!ありがとうございます


ディスカッションへの返信(解決策)

set_time_limit(0) スクリプトの実行時間を上限なしで設定します

set_time_limit(0) は、タイムアウト時間の前に他のページにアクセスするとハングするタイムアウトを設定します。

a.php
set_time_limit(0);
ignore_user_abort(true); //ページを閉じるとまだ実行中です
//code..
すべてのデータがデータベースに挿入された後、忘れずに exit を追加してください。それは意味ですか? aとbは同時に実行されますか?なぜ待つのですか? CPU を割り当てる時期はまだ来ていませんか?まだリソースを待っていますか?

PHP はマルチスレッドをサポートしていません。マルチスレッドをシミュレートするには Apache を使用してください。

データベースはロックされていますか?

データベースはロックされていますか? それはテーブルロックであるはずです

データベースはロックされていますか? それはテーブルロックであるはずです

A がデータを読み取ってテーブルに書き込んでいるとき、B を使用して読み取っている場合、テーブルはおそらくキューイング段階にあります。待機効果をより人間味のあるものにするために、ajax を使用してみてください。

MySQL のロックはテーブルレベルのロックであるようで、行ロックをサポートしていません。扱いが難しい。

しかし、作者はロックを使用していないようです。 mysql はデフォルトではロックを有効にしていないためです。

一度に挿入されるデータ量が多すぎるためですか?

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