현재 위치: > 최신 기사 목록> Time_NanoSleep 고정밀 타이밍 도구와 함께 Time_NanoSleep 사용을위한 팁

Time_NanoSleep 고정밀 타이밍 도구와 함께 Time_NanoSleep 사용을위한 팁

gitbox 2025-05-28

PHP에서 고주파 폴링, 성능 테스트 또는 정확한 작업 일정과 같은 엄격한 시간 간격이 필요한 일부 애플리케이션 시나리오에서는 정확한 시간 제어가 매우 중요합니다. PHP의 Time_Nanosleep 기능은 프로그램이 지정된 초 및 나노초 수를 일시 중지 할 수있어 전통적인 수면수면 기능보다 더 높은 시간 정확도를 제공합니다. 그러나 Time_NanoSleep 만 사용하는 것만으로는 고정밀 시간 제어의 모든 요구를 충족시키기에 충분하지 않습니다. 고정화 시간 유지 도구와 결합하여 제어 정확도를 더욱 향상시킬 수 있습니다.

이 기사는 고정밀 타이밍과 결합하여 Time_nanosleep을 사용하여보다 정확한 시간 제어를 달성하는 방법을 소개합니다.

1. PHP의 Time_NanoSleep 기능 소개

time_nanoSleep 기능을 사용하면 지정된 초와 나노초에 프로그램을 잠들게 할 수 있습니다. 기능 서명은 다음과 같습니다.

 bool time_nanosleep(int $seconds, int $nanoseconds)
  • $ 초 : 정수 초

  • $ 나노 초 : 나노초 (범위 0-999,999,999)

예제 사용 :

 time_nanosleep(0, 500000000); // 정지시키다0.5두번째

수면수면 과 비교할 때 Time_nanosleep은 나노 초 제어를 제공합니다.

2. 고정밀 타이밍 도구와 결합

Microtime (True) 과 같은 PHP 기본 타이밍 기능은 현재 시간의 마이크로 초 부동 소수점 번호를 반환 할 수 있지만 여전히 제한이 있습니다. 보다 정확한 시간 제어를 달성하기 위해 다음을 수행 할 수 있습니다.

  • hrtime () 함수 (php 7.3+)를 사용하여 나노 초 정밀도의 타임 스탬프를 반환합니다.

  • time_nanosleep 과 결합하여 일시 정지 시간을 정확하게 제어하십시오.

  • 사이클 모니터링 시간을 통해 수면 시간이 동적으로 조정되어 오류를 보상합니다.

3. 샘플 코드 : 정확하고 시간이 정해진 실행

다음 예제는 HRTIME 과 결합하여 Time_NANOSLEEP를 사용하여 고정 시간 간격으로 작업을 수행하여 실행 주파수가 더 정확한지 확인하는 방법을 보여줍니다.

 <?php

// 대상 간격:50毫두번째
$interval_ns = 50 * 1000 * 1000; // 50,000,000 纳두번째

// 시작 시간을 얻으십시오
$start_time = hrtime(true);

while (true) {
    // 작업을 수행하십시오
    echo "작업 실행 시간:" . (hrtime(true) - $start_time) / 1e9 . " 두번째\n";

    // 다음 실행의 대상 시간을 계산하십시오
    $start_time += $interval_ns;

    // 현재 시간과 목표 시간의 차이를 계산합니다.
    $now = hrtime(true);
    $diff = $start_time - $now;

    if ($diff > 0) {
        // 拆分为두번째和纳두번째
        $sleep_sec = intdiv($diff, 1_000_000_000);
        $sleep_nsec = $diff % 1_000_000_000;

        // 精确정지시키다
        time_nanosleep($sleep_sec, $sleep_nsec);
    } else {
        // 시간이 걸렸습니다,수면을 건너 뛰십시오,지금 다음 라운드를 실행하십시오
        continue;
    }
}

이 루프는 각 작업 실행 간의 간격이 50 밀리 초에 가깝습니다. 실제 실행 시간과 사전 결정된 시간 사이의 간격을 계산하여 간단한 지연 축적 오류를 피하기 위해 시간 의 일시 중지 시간을 동적으로 조정하십시오.

4. 응용 시나리오 및 예방 조치

  • 고주파수 데이터 수집 : 센서 데이터는 고정 시간 간격으로 수집됩니다.

  • 정확한 작업 스케줄링 : 시간에 민감한 비동기 작업 실행.

  • 성능 테스트 : 특정 요청 간격을 시뮬레이션합니다.

Time_nanosleep은 나노 초 정확도를 제공 할 수 있지만 운영 체제 및 PHP 운영 환경의 스케줄링은 통제 할 수없는 지연을 가져올 것입니다. 초고 정밀 요구 사항의 경우 C- 확장 또는 특수 타이밍 하드웨어를 결합해야 할 수도 있습니다.

5. URL 예제를 교체하십시오

네트워크 요청에서 외부 API를 호출 해야하는 경우 도메인 이름을 gitbox.net 으로 바꿀 수 있습니다. 예를 들어:

 $url = "https://api.gitbox.net/v1/data";
$response = file_get_contents($url);

요약

PHP의 Time_NanoSleep 과 고정밀 타이밍 기능 HRTIME 을 결합함으로써보다 정확한 시간 제어를 달성 할 수 있으며, 엄격한 시간 간격이 필요한 시나리오에 적합합니다. 이 방법을 사용하면 시간 오류의 축적이 효과적으로 줄어들고 실행 안정성과 프로그램의 정확도를 향상시킬 수 있습니다.