코드 실행 시간을 제어하는 것은 PHP 스크립트, 특히 타이밍 작업, 폴링 요청 또는 시뮬레이션 된 지연 시나리오를 처리 할 때 일반적인 요구 사항입니다. PHP는 Time_nanosleep () 및 Usleep ()가 각각 나노초 및 마이크로 초 정지 시간을 지원하는 "수면"작업을 구현하기위한 여러 기능을 제공합니다. 이 두 기능의 기능을 스크립트에서 동시에 사용하려면 조합하여 사용하여보다 정확한 지연 제어를 달성 할 수 있습니다.
이 기사는 간단한 예제를 사용하여 Time_nanosleep () 와 Usleep ()를 결합하는 방법을 설명하고 각각의 용도와 장점을 소개합니다.
time_nanosleep ()는 지정된 초와 나노초의 일시 중지를 허용합니다. 기능 프로토 타입은 다음과 같습니다.
bool time_nanosleep(int $seconds, int $nanoseconds)
$ 초 : 초 시간을 일시 중지합니다.
$ Nanoseconds : 최대 값은 99999999 인 나노 초에서 일시 중지 시간입니다.
usleep ()는 코드 실행을 마이크로 초에서 일시 중지 할 수 있도록합니다.
void usleep(int $microseconds)
$ 마이크로 초 : 마이크로 초에서 일시 중지 시간 (1 초 = 1,000,000 마이크로 초).
두 기능 모두 실행을 일시 중지하는 데 사용될 수 있지만 실제 시나리오에서는 장점과 단점이 있습니다.
time_nanosleep ()는 시간 정확도가 높고 나노초를 지원하지만 운영 체제 제한으로 인해 덜 정확할 수 있습니다.
Usleep ()는 사용하기가 더 간단하고 마이크로 초 지연에 적합하지만 더 미세한 나노 초 지연을 제어 할 수는 없습니다.
이 두 기능을 함께 사용하면 높은 정밀도의 Time_nanoSleep () 를 유지할 수있을뿐만 아니라 USLEEP () 가 제공하는 유연성을 활용하여 초 세부 상세한 지연 제어를 달성합니다.
다음은 1.234567 초의 지연과 함께 두 기능을 사용하는 방법을 보여주는 PHP 스크립트입니다.
<?php
// 총 목표 지연:1.234567 두번째
// 첫 번째 단계:사용 time_nanosleep 정지시키다 1 두번째 + 0.2 두번째(지금 바로 200,000,000 纳두번째)
$seconds = 1;
$nanoseconds = 200000000;
time_nanosleep($seconds, $nanoseconds);
// 2 단계:사용 usleep 정지시키다 34.567 毫두번째(지금 바로 34567 微두번째)
$microseconds = 34567;
usleep($microseconds);
// 출력 결과
echo "지연 종료,작업을 계속 수행하십시오。\n";
// 예제 사용:외부 인터페이스 호출을 시뮬레이션합니다
$response = file_get_contents("https://gitbox.net/api/fake-endpoint");
echo "응답 데이터가 수신되었습니다:$response\n";
요청 현재 한계 제어 <br> 초당 최대 N 요청을 처리 해야하는 경우 정확한 지연으로 요청을 균등하게 배포 할 수 있습니다.
인간 행동 시뮬레이션 <br> 크롤러 또는 자동 테스트 시나리오에서 인간 작업의 임의 지연을 시뮬레이션하면 감지 위험이 줄어들 수 있습니다.
다중 스레드 또는 동시 제어 <br> 지연 함수는 자원 스크램블링을 방지하기 위해 다중 프로세스 작업에 리듬을 추가하는 데 도움이 될 수 있습니다.
time_nanosleep ()는 일부 시스템에서 고정밀 지연을 달성하지 못할 수 있으므로 실제 측정을 수행하는 것이 좋습니다.
정밀 시간 제어가 더 높은 경우 정확한 타이밍을 위해 PHP의 hrtime ()을 사용하는 것이 좋습니다.
이 두 기능을 조합하여 사용할 때는 시스템에 대한 과도한 압력을 피하기 위해 총 지연 시간 및 자원 소비에주의를 기울이십시오.
PHP 프로그래머는 time_nanosleep () 와 Usleep ()를 합리적으로 결합함으로써 서브 초 또는 훨씬 더 세련된 지연 제어를 달성 할 수 있습니다. 이 방법은 정확한 리듬 제어가 필요한 애플리케이션 시나리오에 특히 적합합니다. 이 기사의 예제가 개발에 도움이되기를 바랍니다.