PHP에서는 종종 프로그램을 일정 시간 동안 일시 중지해야하며, 이는 폴링, 타이밍 작업 또는 속도 제한 작업을 처리 할 때 매우 일반적입니다. 일반적으로 사람들은 수면 () 기능을 사용하여이를 달성하지만 수면 () 의 시간 단위는 초이며 밀리 초 또는 나노초의 정확한 제어 요구 사항을 충족시킬 수 없습니다. 이 시점에서 PHP는 Time_Nanosleep () 함수를 제공하여 초 및 나노초의 정확도로 일시 정지 시간을 제어 할 수 있습니다.
time_nanoSleep () 는 PHP 5.0.0 이상에서 제공되는 함수로, 현재 프로세스가 지정된 초 및 나노초의 수를 일시 중지하게합니다. sleep () 와 비교할 때 시간이 정확할 수 있습니다. Time_nanoSleep ()를 사용하면 일시 중지 시간을보다 유연하게 제어 할 수 있습니다.
함수 정의는 다음과 같습니다.
bool time_nanosleep(int $seconds, int $nanoseconds)
$ 초 : 잠시 멈춤, 정수 수.
$ Nanoseconds : 정수, 정수의 나노초 수는 0에서 999,999,999입니다.
일시 정지가 성공하면 함수가 TRUE를 반환하고 중간의 신호에 의해 중단되면 남은 시간이 포함 된 배열을 반환합니다.
다음은 1 초 및 500 밀리 초 (1.5 초)의 일시 중지 방법에 대한 간단한 예입니다.
<?php
echo "시작 시간:" . microtime(true) . PHP_EOL;
$seconds = 1;
$nanoseconds = 500000000; // 500 밀리 초 = 500,000,000 나노 초
if (time_nanosleep($seconds, $nanoseconds)) {
echo "수면 종료 시간:" . microtime(true) . PHP_EOL;
} else {
echo "수면 중단" . PHP_EOL;
}
?>
실행 결과는 시간 차이가 약 1.5 초인 타임 스탬프를 두 번 보여줍니다.
시스템 신호에 의해 Time_nanoSleep () 가 중단되면 나머지 초와 나노초를 포함하는 배열이 반환됩니다. 반품 값에 따라 Time_nanoSleep () 에게 다시 전화하여 계속 수면을 유지할 수 있습니다. 예는 다음과 같습니다.
<?php
$seconds = 2;
$nanoseconds = 0;
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
echo "수면 완료" . PHP_EOL;
break;
} elseif (is_array($result)) {
echo "수면 중단,남은 시간:{$result['seconds']}두번째 {$result['nanoseconds']}나노 초" . PHP_EOL;
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
} else {
echo "잠들지 못했습니다" . PHP_EOL;
break;
}
}
?>
이 글은 프로그램이 신호에 의해 중단 된 후 미리 결정된 수면 시간을 계속 완료 할 수 있도록합니다.
요청 속도 제한 함수를 구현하고 각 요청 사이에 200 밀리 초 동안 일시 중지한다고 가정하면 Curl 과 함께 요청을 보내서 Time_nanosleep ()를 사용하여 간격 시간을 정확하게 제어 할 수 있습니다. 샘플 코드는 다음과 같습니다.
<?php
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3",
];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo "요청이 실패했습니다:" . curl_error($ch) . PHP_EOL;
} else {
echo "요청이 성공했습니다:" . substr($response, 0, 50) . "..." . PHP_EOL;
}
curl_close($ch);
// 정지시키다 200 밀리 초
time_nanosleep(0, 200000000);
}
?>
이 코드는 차례로 3 개의 인터페이스를 요청하여 각 요청 후 200 밀리 초 동안 일시 중지하므로 너무 빈번한 요청을 피합니다.
time_nanosleep ()를 사용하면 PHP 프로그램을 초 및 나노초 정밀도로 일시 중지 할 수 있습니다.
전통적인 수면 () 및 usleep () 보다 유연하며 시간 제어 정확도에 대한 요구 사항이 높은 시나리오에 적합합니다.
프로그램 논리의 견고성을 보장하기 위해 신호 인터럽트 처리에주의를 기울이십시오.
Time_nanosleep ()는 속도 제한, 간격 제어 또는 미세 스케줄링이 필요할 때 매우 실용적인 기능입니다.
Time_nanosleep ()를 합리적으로 사용하면 PHP 응용 프로그램이 시간 제어가보다 정확하고 효율적 일 수 있습니다.