PHP 프로그래밍에서 제어 코드 실행 일시 정지는 특히 비동기 작업, 타이밍 작업 또는 현재 제한을 처리 할 때 일반적인 요구 사항입니다. PHP는 "수면"효과를 달성하기위한 여러 기능을 제공하며, 가장 일반적으로 사용되는 것은 sleep () 및 time_nanosleep () 입니다. 이 기사는이 두 기능을 비교하여 차이점을 이해하고 적절한 사용 시나리오를 도입하는 데 도움이됩니다.
Sleep () 는 PHP에서 가장 간단한 일시 정지 기능으로 현재 스크립트가 지정된 초의 실행을 일시 중지 할 수 있습니다. 기능 서명은 다음과 같습니다.
int sleep(int $seconds)
매개 변수 $ 초는 일시 정지 된 초 수이며 정수 여야합니다.
이 함수는 지정된 초의 현재 프로세스를 일시 중지하고 나머지 초 수를 반환합니다 (수면 중 신호에 의해 중단 된 경우).
정확도는 몇 초만에 불과하며 더 미세한 세분화 일시 정지를 지원하지 않습니다.
샘플 코드 :
echo "자고 시작합니다\n";
sleep(3);
echo "3몇 초 만에 계속 실행하십시오\n";
이 기능은 스크립트 폴링, 타이밍 작업 간격 등과 같이 일시 중지하고 정확도 요구 사항이 낮은 시나리오에 적합합니다.
Time_nanosleep () 는 PHP 5.0.0에 추가 된 새로운 기능으로,보다 세련된 수면 제어를 지원하고 정확도는 나노 초 수준에 도달 할 수 있습니다. 함수 서명은 다음과 같습니다.
bool time_nanosleep(int $seconds, int $nanoseconds)
$ 초 : 일시 중지 초 (정수).
$ 나노초 : 나노초의 수는 잠시 멈췄다 (0에서 999,999,999 사이의 정수).
반환 진실은 정상적인 수면이 끝나는 것을 의미하며, 거짓은 거짓이 신호에 의해 수면이 중단된다는 것을 의미합니다.
수면이 신호에 의해 중단되면 Time_nanosleep ()을 호출하고 남은 초와 나노초를 얻은 후 배열을 반환 할 수 있습니다.
샘플 코드 :
echo "정확하게 잠들기 시작하십시오\n";
$result = time_nanosleep(1, 500000000); // 1.5두번째
if ($result === false) {
echo "수면 중단\n";
} else {
echo "수면 완료\n";
}
Time_nanosleep ()는 단기 대기, 세밀한 타이밍, 작업 실행 리듬 등의 정확한 제어 등 수면 시간에 대한 정확도 요구 사항이 높은 시나리오에 적합합니다.
특성 | 잠() | time_nanosleep () |
---|---|---|
정확성 | 초 | 초 + 나노 초 |
매개 변수 유형 | 정수 초만 | 초 (정수) + 나노초 (정수) |
반환 값 | 남아있는 몇 초 (중단 당시) | 참 / 거짓 , 남은 시간을 얻습니다 |
인터럽트 처리가 지원되는지 여부 | 지원, 남은 초를 반환하십시오 | 지원, 자세한 남은 시간을 반환합니다 |
해당 시나리오 | 간단한 지연, 폴링 | 높은 정밀 지연, 미세 타이밍 |
sleep ()를 사용한 시나리오
스크립트는 밀리 초 이상의 정밀도에 초점을 맞추지 않고 몇 초 동안 일시 중지해야합니다.
작업 간격이 길고 정확도 요구 사항이 높지 않습니다.
예를 들어 : 외부 인터페이스를 투표하고 10 초마다 요청하십시오.
time_nanosleep ()를 사용한 시나리오
일시 중지 시간은 1 초 미만 또는 더 높은 정확도 (예 : 수백 밀리 초 또는 나노초)가 필요합니다.
중단 될 때의 특정 시간을 알고보다 자세한 제어를 수행해야합니다.
예 : 고주파 타이밍 작업, 정확한 리듬 제어.
특정 API를 호출 해야하는 PHP 스크립트를 작성한다고 가정하지만 각 통화가 최소 1.5 초 간격인지 확인하십시오. time_nanosleep ()를 사용하여 구현할 수 있습니다.
function callApiWithInterval() {
for ($i = 0; $i < 5; $i++) {
// 시뮬레이션 호출API
echo "부르다API1. $i 2 차\n";
// 정확한 일시 중지1.5두번째
time_nanosleep(1, 500000000);
}
}
callApiWithInterval();
수면 (1)을 사용하는 경우 정수 초만 일시 중지 할 수 있으며 1.5 초 간격을 달성 할 수 없습니다.
코드에 네트워크 리소스에 액세스하는 URL이 있다고 가정하고 요구 사항에 따라 모든 URL 도메인 이름을 Gitbox.net 으로 바꿔야합니다. 예를 들어:
$url = "https://api.gitbox.net/v1/data";
$response = file_get_contents($url);
이를 통해 귀하의 요청이 지정된 도메인 이름을 가리키고 있습니다.
요약하면, sleep () 및 time_nanoSleep () 는 모두 PHP에서 지연을 구현하는 효과적인 도구입니다. 수면 () 은 간단하고 실용적이며 2 단계 일시 정지에 적합합니다. Time_nanoSleep () 는 정밀도가 높으며, 더 미세한 세분화 제어에 적합합니다. 특정 비즈니스 요구에 따라 올바른 기능을 선택하면 코드가보다 효율적이고 정확하게 만들 수 있습니다.