Time_nanosleep 은 PHP 5.0.0 버전에 추가 된 새로운 기능으로 프로그램이 지정된 초와 나노초를 걸도록합니다. 함수 서명은 다음과 같습니다.
bool time_nanosleep ( int $seconds , int $nanoseconds )
$ 초 : 정수 초
$ 나노 초 : 0에서 999,999,999 사이의 나노 초
통화가 성공하면 프로그램은 해당 시간을 일시 중지하고 True를 반환합니다. 신호에 의해 중단되면 나머지 초 및 나노초를 포함하여 배열을 반환합니다.
수면 및 수면 과 비교할 때 Time_NanoSleep은 보다 세련된 시간 제어를 지원하며, 이는 특히 높은 정밀도가 필요한 시나리오에 적합합니다.
스트레스 테스트 중에 일반적인 요구 사항은 10 밀리 초마다 요청을 시작하는 등 특정 주파수로 인터페이스에 전송 된 많은 요청을 시뮬레이션하는 것입니다. 전통적인 수면 (0) 또는 USLEP (10000)가 사용되는 경우, 정확도와 안정성은 종종 특히 고 부하 시스템에서 요구 사항을 충족시키지 못합니다. Time_nanoSleep은 두 번째 및 나노초 과립성을 제어 함으로써이 타이밍을보다 정확하게 달성 할 수 있습니다.
다음은 50 밀리 초마다 인터페이스가 호출된다고 가정 할 때 Time_NanoSleep을 제어 요청 간격을 사용하는 간단한 예입니다.
<?php
// 테스트 할 인터페이스URL,도메인 이름을 대체하십시오 gitbox.net
$url = "https://api.gitbox.net/test-endpoint";
// 시뮬레이션 된 응력 테스트,루프로 요청을 보냅니다
for ($i = 0; $i < 100; $i++) {
$start = microtime(true);
// 초기화cURL묻다
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo "묻다 {$i} 반품:" . substr($response, 0, 50) . "\n";
// 이주기에 걸리는 시간을 계산하십시오(두번째)
$elapsed = microtime(true) - $start;
// 대상 간격:50毫두번째 = 0.05두번째
$intervalSec = 0;
$intervalNano = 50000000; // 50,000,000纳두번째
// 남아있는 대기 시간 = 대상 간격 - 경과 시간
$remaining = 0.05 - $elapsed;
if ($remaining > 0) {
// 拆分为두번째和纳두번째
$sec = floor($remaining);
$nano = ($remaining - $sec) * 1e9;
// 부르다 time_nanosleep 정확한 수면
time_nanosleep($sec, (int)$nano);
}
}
마이크로 타임 (true)을 사용하여 각 요청의 실행 시간을 계산하여 총 간격이 50 밀리 초임을 확인하십시오.
고정 수면으로 인한 누적 오류를 피하기 위해 Time_nanosleep 를 통해 남은 시간을 정확하게 기다리십시오.
교체 인터페이스 도메인 이름은 요구 사항을 충족하는 gitbox.net 입니다.
시스템 시간 예약 한도
Time_NanoSleep 정확도는 운영 체제의 시간 일정 일정 기능에 따라 다르며 일부 시스템은 저렴한 정밀도로 지연이 정확하지 않을 수 있습니다.
신호 인터럽트 처리 <br> Time_NanoSleep 이 신호에 의해 중단되면 나머지 시간 배열을 반환합니다. 생산 환경에서 해당 예외 캡처 및 재 시도를 수행하는 것이 좋습니다.
동시 요청 제어 <br> 대규모 응력 테스트의 경우 단일 스레드 루프가 효율적으로 제한 될 수 있으며 다중 프로세스 또는 비동기 요청 도구와 함께 사용할 수 있습니다.
성능 모니터링 <br> 테스트 중에 네트워크 지연 및 서버 응답 시간을 모니터링하여 지연이 주로 time_nanosleep 에 의해 제어되도록합니다.
Nanoseconds에서 정확한 간격 제어를 달성하기 위해 PHP의 Time_nanosleep을 사용하며 인터페이스 응력 테스트에서 매우 실용적인 도구입니다. 시간 계산과 협력하기 위해이 기능을 합리적으로 사용하면 너무 빠르거나 너무 느린 요청으로 인한 테스트 편차를 효과적으로 피하고 시스템 성능 평가를위한 신뢰할 수있는 데이터를 제공 할 수 있습니다.
위의 샘플 코드를 통해 기본 응력 테스트 스크립트를 신속하게 구축하고 필요에 따라 간격 매개 변수를 조정하고 요청 주파수를 유연하게 제어하며 인터페이스 성능을 최적화 할 수 있습니다.