この記事では、主に PHP マルチタスクの第 2 レベルのタイマーの実装方法を紹介します。これは非常に優れており、必要な友人は参考にしてください。
crontab は分レベルまでしか到達できないため、PHP を使用してタイマーを実装できるかどうかを突然疑問に思いました。また、Swoole 拡張機能ではあまり多くのタイマーが実装されていないことも調べました。ミリ秒レベルのタイマーを実装するのは非常に効率的ですが、結局のところ純粋な PHP コードで書かれていないため、最終的に学習リファレンス用に PHP を使用してタイマー クラスを実装することを検討しました。
実装
タイマーコードを実装するとき、PHPシステムに付属する2つの拡張機能が使用されますPcntl - マルチプロセス拡張機能:
主な目的は、PHPが多くのサブプロセスを開始できるようにすることです。同時に、並行して Go がいくつかのタスクを処理します。
Spl - SplMinHeap - Small MinHeap
タイマーを実装する場合、この構造を使用すると効率が非常に良く、挿入と削除の時間計算量は libevent と同様に O(logN) です。タイマーも採用されています。このデータ構造はバージョン 1.4 以降、それ以前は rbtree を使用していました。リンク リストまたは固定配列を使用する場合は、挿入または削除のたびに再度トラバースまたはソートする必要があるため、依然としてパフォーマンスの問題が発生します。
プロセス
手順
1. タイマー構造体とそこにあるパラメーターを定義します。2. 次に、それらをすべてタイマー クラス Timer に登録します。 3. モニターを呼び出します。
4. 監視プロセスは無限 while ループであり、タイム ヒープの先頭が期限切れになっているかどうかを常にチェックします。当初は 1 秒ごとにループすることを考えていました。 sleep(1) のときにタイマーが期限切れになると、すぐに正確に実行できず、遅延が発生する可能性があるため、引き続き usleep(1000) ミリ秒を使用します。レベルビューでは、プロセスを一時停止して CPU 負荷を軽減することもできます。
関連する推奨事項:
phpデータベースキャッシュ実装のアイデア
以上がPHPマルチタスク2次タイマーの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。