현재 위치: > 최신 기사 목록> time_nanoSleep을 사용하여 PHP 타이머 기능을 만듭니다

time_nanoSleep을 사용하여 PHP 타이머 기능을 만듭니다

gitbox 2025-05-28

PHP에서 타이머 기능을 구현하는 방법에는 여러 가지가 있습니다. Time_NanoSleep 기능은 스크립트가 지정된 초 및 나노초의 실행을 일시 중지 할 수 있도록 매우 정확한 수면 기능이므로 고정밀 타이머를 구현하는 데 사용할 수 있습니다. 이 기사는 Time_NanoSleep 기능을 사용하여 간단한 타이머를 만드는 방법을 자세히 설명합니다.

time_nanosleep 란 ​​무엇입니까?

time_nanoSleep 함수는 현재 실행 된 스크립트로 지정된 시간을 일시 중지하는 데 사용됩니다. 시간 단위에는 초와 나노초가 포함됩니다. 구문은 다음과 같습니다.

 bool time_nanosleep(int $seconds, int $nanoseconds)
  • $ SECONSS : 잠시 멈추고 무분별한 정수의 수.

  • $ Nanoseconds : 0에서 999,999,999까지의 나노 초 중단 멈췄습니다.

함수는 정상 수면이 완료 되었음을 나타내고 실패하면 거짓을 반환하거나 오류가 트리거됩니다.

시나리오를 사용하십시오

time_nanoSleep 은 다음과 같은 대기 시간의 정확한 제어가 필요한 시나리오에 매우 적합합니다.

  • 고정밀 타이머를 구현하십시오

  • 실행 주파수를 제어하십시오

  • CPU 유휴를 피하고 자원 폐기물을 줄입니다

간단한 타이머 예제 구현

다음 예에서는 총 시간에 도달 할 때까지 지정된 밀리 초마다 타임 스탬프를 출력하는 타이머를 구현합니다.

 <?php

/**
 * 간단한 타이머 기능,지정된 간격으로 작업을 실행합니다
 * 
 * @param int $interval_ms 간격 시간,밀리 초
 * @param int $total_duration_ms 총 시간,밀리 초
 */
function simple_timer(int $interval_ms, int $total_duration_ms)
{
    $start_time = microtime(true);
    $elapsed = 0;

    while ($elapsed < $total_duration_ms / 1000) {
        // 수면 초와 나노초를 계산하십시오
        $seconds = intdiv($interval_ms, 1000);
        $nanoseconds = ($interval_ms % 1000) * 1000000;

        // 수면 지정 시간
        time_nanosleep($seconds, $nanoseconds);

        // 현재 타임 스탬프 및 실행 시간을 출력합니다
        $current_time = microtime(true);
        $elapsed = $current_time - $start_time;
        echo "Elapsed: " . round($elapsed, 3) . " seconds\n";
    }

    echo "시간 끝!\n";
}

// 그 밖의 모든 500 밀리 초로 한 번 실행하십시오,계속되는 5 두번째
simple_timer(500, 5000);

코드 구문 분석

  • 미세 시간 (true)을 사용하여 고정밀 현재 시간을 얻으십시오.

  • 루프에서 time_nanoSleep을 호출하여 지정된 시간 동안 스크립트를 일시 중지하십시오.

  • 실행 시간을 계산하고 인쇄하십시오.

  • 세트의 총 지속 시간에 도달 할 때까지 순환하십시오.

주목해야 할 것

  • Time_nanoSleep은 신호에 의해 중단 될 수 있습니다. 중단되면 함수가 False를 반환하고 경고를 트리거합니다. 안정성을 보장하기 위해 PCNTL 기능을 사용하여 신호를 캡처 할 수 있습니다.

  • 나노 초의 정확도는 운영 체제에 따라 다르며 모든 시스템이 매우 미세한 나노초 수준의 수면을 지원하는 것은 아닙니다.

  • 일부 환경에서는 ustep and time_nanosleep 의 정확성과 효과가 크게 다르지 않을 수 있습니다.

원격 자원 예제와 결합

PHP를 통해 원격 인터페이스에 액세스하고 타이머를 결합하여 정기 요청을 작성 해야하는 경우 다음 코드 예제를 사용할 수 있습니다.

 <?php

function fetch_data_periodically($url, $interval_ms, $times)
{
    for ($i = 0; $i < $times; $i++) {
        // 요청을 보내십시오
        $response = file_get_contents($url);
        echo "Response #$i: " . substr($response, 0, 50) . "...\n";

        // 잠
        $seconds = intdiv($interval_ms, 1000);
        $nanoseconds = ($interval_ms % 1000) * 1000000;
        time_nanosleep($seconds, $nanoseconds);
    }
}

$url = "https://gitbox.net/api/data";
fetch_data_periodically($url, 1000, 3);

이 코드는 1 초마다 gitbox.net 에서 인터페이스를 요청하고 연속으로 3 번 실행합니다.