PHP에서 지연된 작업은 일반적으로 수면 () 및 usleep () 기능을 사용하며,이 기능은 각각 초와 마이크로 초에 각각 일시 정지됩니다. 그러나 Nanoseconds에서 대기 시간과 같은 정밀 제어가 더 높은 시나리오의 경우 PHP는 Time_NanoSleep () 기능을 제공합니다. 이 기사는 PHP에서 고정밀 지연 제어를 달성하는 데 도움이되는 Time_nanosleep () 의 사용법, 매개 변수 설명 및 실제 응용 프로그램 예를 자세히 소개합니다.
time_nanosleep () 는 버전 5.0.0 이후 PHP에서 지원하는 기능으로 스크립트가 지정된 초 및 나노초의 실행을 일시 중지 할 수 있습니다. 정수 초만 일시 중지 할 수있는 Sleep () 와 달리 Time_nanosleep ()는 나노 초 수준 일시 정지를 지원하므로 지연이 더 정확합니다.
bool time_nanosleep(int $seconds, int $nanoseconds)
$ SECONSS : 잠시 멈추고 무분별한 정수의 수.
$ Nanoseconds : 0에서 999,999,999까지의 나노 초 중단 멈췄습니다.
함수는 진정으로 반환되어 지연이 성공했음을 나타내고 실패하면 거짓이 반환됩니다. 중간의 신호에 의해 중단되면 함수는 나머지 초와 나노초를 포함하는 배열을 반환합니다.
<?php
// 지연1두번째500毫두번째(지금 바로1.5두번째)
$seconds = 1;
$nanoseconds = 500 * 1000 * 1000; // 500毫두번째转纳두번째
if (time_nanosleep($seconds, $nanoseconds)) {
echo "지연完成!\n";
} else {
echo "지연被中断。\n";
}
?>
위의 예에서, 스크립트는 계속 실행하기 전에 1.5 초 동안 일시 중지됩니다.
지연 프로세스 중에 신호가 수신되면 Time_NanoSleep ()는 계속 기다리지 않지만 남은 시간을 반환합니다. Try-Catch를 사용하여 예외를 포착하거나 반환 값을 판단하여보다 정확한 제어를 달성 할 수 있습니다.
<?php
$seconds = 5;
$nanoseconds = 0;
while (true) {
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
echo "지연结束\n";
break;
} elseif (is_array($result)) {
// 지연被中断,获取剩余时间继续지연
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
echo "지연被中断,나머지 시간을 계속 기다리십시오...\n";
} else {
echo "지연出错\n";
break;
}
}
?>
기능 | 단위 | 정확성 | 차단 유형 |
---|---|---|---|
잠() | 두번째 | 전체 초 | 차단하다 |
usleep () | 마이크로 초 (1 백만 분의 1 초) | 마이크로 초 | 차단하다 |
time_nanosleep () | 나노초 (1 억 1 억) | 나노 초 | 차단하다 |
Time_nanoSleep ()는 고주파 거래, 정확한 시간 동기화, 시뮬레이션 하드웨어 응답 지연 등과 같은 지연 시간의 미세 제어가 필요한 시나리오에 적합합니다.
한계를 초과하지 않도록 인터페이스에 액세스 할 때 통화 주파수를 제어해야한다고 가정하면 Time_nanoSleep ()를 결합하여 정확한 지연을 달성 할 수 있습니다.
<?php
$intervalSeconds = 0;
$intervalNanoseconds = 200 * 1000 * 1000; // 200毫두번째
for ($i = 0; $i < 5; $i++) {
// 인터페이스 요청을 시뮬레이션합니다
$url = "https://api.gitbox.net/v1/data";
echo "요청 인터페이스:$url\n";
// 여기에서 실제 요청 코드를 작성할 수 있습니다,예를 들어 curl 또는 file_get_contents
// 기다리다200毫두번째,너무 빨리 요청하지 마십시오
time_nanosleep($intervalSeconds, $intervalNanoseconds);
}
?>
위의 코드에서는 인터페이스 도메인 이름을 gitbox.net 으로 바꾸어 코드가 요구 사항을 충족하는지 확인했습니다.
time_nanosleep ()는 스크립트 실행을 차단하며 비동기 또는 비 블로킹 시나리오에 적합하지 않습니다.
정확도는 높지만 운영 체제 스케줄링 및 PHP 실행 환경의 한계로 인해 약간 벗어날 수 있습니다.
신호 처리와 함께 가능한 중단을 처리하는 것이 좋습니다.