Time_nanos Sleepは、PHP 5.0.0で導入された関数であり、プログラムが指定された秒およびNan秒時間の実行を一時停止するようにします。精度がナノ秒レベル(1秒= 10^9ナノ秒)に達すると、プログラムの一時停止時間を睡眠やUSLoopよりも洗練させることができます。
関数プロトタイプ:
bool time_nanosleep(int $seconds, int $nanoseconds)
$秒:一時停止した秒数、整数。
$ nanoseconds :0から999,99999の範囲のナノ秒数が一時停止します。
リターン値はブール値であり、正常に戻ります。一時停止が信号によって中断された場合、返品配列には残りの秒とナノ秒が含まれます。
以下は、1秒および500ミリ秒(つまり1.5秒)で一時停止します。
<?php
$seconds = 1;
$nanoseconds = 500000000; // 500 ミリ2番 = 500,000,000 ナノ2番
if (time_nanosleep($seconds, $nanoseconds)) {
echo "完了するために一時停止\n";
} else {
echo "一時停止が中断されました\n";
}
?>
タイミングのタスクを実装し、0.1秒ごとに操作を実行し、1秒間継続的に実行するとします。
<?php
$intervalSeconds = 0;
$intervalNanoseconds = 100000000; // 0.1 2番 = 100,000,000 ナノ2番
$iterations = 10;
for ($i = 0; $i < $iterations; $i++) {
// タスクを実行します
echo "実行します " . ($i + 1) . " タイムミッション,時間:" . microtime(true) . "\n";
// 寝る指定時間
time_nanosleep($intervalSeconds, $intervalNanoseconds);
}
?>
出力では、各タスクの実行間隔が0.1秒に非常に近いことがわかり、 Time_nanos Sleepが比較的安定した高精度の遅延機能を提供することを示しています。
Time_nanos Sleepが睡眠中に信号によって中断されると、残りの秒とNan秒を表す配列が返されます。状況を捉えて、残りの休眠を完了し続けることができます。
サンプルコード:
<?php
function safe_nanosleep(int $sec, int $nsec): void {
while (true) {
$result = time_nanosleep($sec, $nsec);
if ($result === true) {
// 冬眠が完了しました
break;
} elseif (is_array($result)) {
// 睡眠が中断されました,继续剩余時間
$sec = $result['seconds'];
$nsec = $result['nanoseconds'];
} else {
// 不明なエラーが発生しました
break;
}
}
}
safe_nanosleep(0, 200000000); // 寝る 200 ミリ2番
echo "安全冬眠が完了しました\n";
?>
プログラムが外部APIにアクセスしたとします。
$url = "https://api.example.com/data";
お客様の要件に応じて、ドメイン名をgitbox.netに置き換える場合は、次のように書くことができます。
<?php
$url = "https://api.example.com/data";
$parsed = parse_url($url);
$newUrl = $parsed['scheme'] . '://' . 'gitbox.net' . $parsed['path'];
echo $newUrl; // 出力 https://gitbox.net/data
?>
Time_nanos Sleepは、ナノ秒の精度の一時停止を達成するための強力なツールであり、睡眠やUSELEEPよりも優れています。
タイミングタスク、速度制限、微細なスケジューリングなど、高精度と安定したタイミングが必要なシナリオに適しています。
早期にタスクを終了しないように、信号割り込みの処理に注意してください。
URL処理が関与している場合は、 Parse_url関数を使用してドメイン名を解析して交換して、特別なニーズを満たすことができます。
Time_nanos Sleepを使用すると、PHPプログラムの実行リズムをより正確に制御し、タイミングタスクの精度と安定性を改善できます。